题目描述
有一个数列A[n],从A[0]开始每一项都是一个数字,数列中A[n+1]都是A[n]的描述,其中A[0]=1,规则如下:
A[0]:1
A[1]:11 含义其中A[0]=1是1个1 即11,表示A[0]从左到右连续出现了1次1
A[2]:21 含义其中A[1]=11是2个1 即21, 表示A[1]从左到右连续出现了2次1
A[3]:1211 含义其中A[2]从左到右是由一个2和一个1组成 即1211,表示A[2]从左到右连续出现了一次2又连续出现了一次1
A[4]:111221 含义A[3]=1211 从左到右是由一个1和一个2两个1 即111221,表示A[3]从左到右连续出现了一次1又连续出现了一次2又连续出现了2次1
输出第n项的结果
0<= n <=59
输入描述
数列第n项 0<= n <=59
输出描述
数列内容
示例1
输入
4
输出
111221
题解
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数列第n项(0<= n <=59):");
int n = scanner.nextInt();
String result = generateNthTerm(n);
System.out.println(result);
}
/**
* 生成数列的第n项
* @param n
* @return
*/
public static String generateNthTerm(int n) {
// 首先对输入进行合法性检查
if (n < 0 || n > 59) {
throw new IllegalArgumentException("Invalid input. n should be between 0 and 59.");
}
String currentTerm = "1";
for (int i = 1; i <= n; i++) {
currentTerm = getNextTerm(currentTerm);
}
return currentTerm;
}
/**
* 根据当前项生成下一项
* @param term
* @return
*/
private static String getNextTerm(String term) {
StringBuilder result = new StringBuilder();
int count = 1;
char currentDigit = term.charAt(0);
for (int i = 1; i < term.length(); i++) {
char nextDigit = term.charAt(i);
// 如果当前字符与下一个字符相同,则计数加一
if (nextDigit == currentDigit) {
count++;
} else {
// 如果不同,则将计数和当前字符添加到结果中,并更新当前字符和计数
result.append(count).append(currentDigit);
currentDigit = nextDigit;
count = 1;
}
}
// 将最后一个字符和计数添加到结果中
result.append(count).append(currentDigit);
return result.toString();
}