題目描述
奇怪的數列
從 X 星截獲一份電碼,是一些數字,如下:
13
1113
3113
132113
1113122113
??
YY 博士經徹夜研究,發現了規律:
第一行的數字隨便是什么,以后每一行都是對上一行"讀出來"
比如第 2 行,是對第 1 行的描述,意思是:1 個 1,1 個 3,所以是:1113
第 3 行,意思是:3 個 1,1 個 3,所以是:3113
請你編寫一個程序,可以從初始數字開始,連續進行這樣的變換。
輸入描述
第一行 輸入一個數字組成的串,不超過 100 位。
第二行,一個數字?n,表示需要你連續變換多少次,n?不超過 20。
輸出描述
輸出一個串,表示最后一次變換完的結果。
輸入輸出樣例
示例
輸入?
5
7
輸出
13211321322115
運行限制
- 最大運行時間:1s
- 最大運行內存: 512M
我的解答:
import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {/*** 計算傳入字串第一個字符連續出現的個數*/private static int countNum(String s){int cnt=1;// 獲取字符串第一個字符char c = s.charAt(0);for(int i=1;i<s.length();i++){if(c == s.charAt(i)){cnt++;}else{break;}}return cnt;}public static void main(String[] args) {Scanner scan = new Scanner(System.in);//在此輸入您的代碼...// 初始化結果字符串String result = new String();// m 不超過100String m = scan.next();// n 不超過 20int n = scan.nextInt();// 經過 n 次變換for(int i=1;i<=n;i++){StringBuilder temp = new StringBuilder();for(int j=0;j<m.length();){// 需要處理的子串String subString = m.substring(j);// 拿到當前數字char subChar = subString.charAt(0);// 拿到m中前面數字的長度int cnt = countNum(subString);// 追加當前數字出現的個數temp.append(cnt);// 追加當前數字temp.append(subChar);j+=cnt;}m = temp.toString();result = m;}System.out.println(result);scan.close();}
}
感覺挺簡單的,沒什么難度。