java从X星截获一份电码,是如下一些数字串: 13、1113、3113、132113、1113122113、…… YY博士经彻夜研究,发现了规律: 第一个数随便是什么,以后每个数都是对上一个数“读出来”。 比如第二个数是对第一个数的描述,意思是:1个1,1个3,所以是1113. 第3个数意思是:3个1,1个3,所以是3113。 请编写一个程序,可以从初始数字开始,连续进行这样的变换。 输入数据时,第一行输入一个数字组成的串,不超过100位。第二行输入一个数字n,表示需要连续变换多少次,n不超过20。 输出一个串,表示最后 一次变换完的结果。 例如:用户输入5和7,则程序应该输出:13211321322115.
时间: 2023-12-13 11:06:17 浏览: 144
这道题可以使用递归的方式来实现,具体实现过程如下:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String num = scanner.nextLine(); // 输入数字串
int n = scanner.nextInt(); // 变换次数
String result = num;
for (int i = 1; i <= n; i++) {
result = getNext(result); // 循环变换n次
}
System.out.println(result);
}
// 获取下一个数字串
private static String getNext(String num) {
StringBuilder sb = new StringBuilder();
int count = 1; // 计数器,记录相邻相同数字出现次数
char c = num.charAt(0); // 当前数字
for (int i = 1; i < num.length(); i++) {
if (num.charAt(i) == c) { // 如果当前数字与前一个相同,计数器加1
count++;
} else { // 如果当前数字与前一个不同,将上一个数字出现次数和数字本身添加到结果中
sb.append(count).append(c);
c = num.charAt(i); // 更新当前数字为新的数字
count = 1; // 重置计数器
}
}
sb.append(count).append(c); // 将最后一个数字出现次数和数字本身添加到结果中
return sb.toString();
}
}
```
输入样例:
```
13
5
```
输出样例:
```
11131221133112132113212221
```
阅读全文