标题:奇怪的数列
从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
资源约定:
峰值内存消耗(含虚拟机) < 512M
CPU消耗 < 1000ms
请严格按要求输出,不要画蛇添足地打印类似:“请您输入...” 的多余内容。
所有代码放在同一个源文件中,调试通过后,拷贝提交该源码。
注意:不要使用package语句。不要使用jdk1.7及以上版本的特性。
注意:主类的名字必须是:Main,否则按无效代码处理。
import java.util.Scanner;
public class 奇怪的数列 {
/**
* @param args
*/
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
String str=sc.nextLine();//初始串
int n=sc.nextInt();//要求的变换次数
String temp="";//保存最后的字符串
f(str,n);
System.out.println(temp);
}
private static void f(String str, int n) {
String temp="";
if(n==0){
System.out.println(str);
return;
}
for (int i = 0; i < str.length();) {
int k=0;
//找到不桶的元素记录,下标
int j;
for (j = i; j < str.length(); j++) {
if(str.charAt(j)!=str.charAt(i)){//找到不同的下标
k=j;//记录
break;
}
if(j==str.length()-1){//如果到达了最后的下标
k=j+1;//记录
break;
}
}
int s=k-i;//计算该值有几个相同的
temp+=s+""+str.charAt(i)+"";//生成字符串
if(k==str.length()){//如果到了最后元素的下标,直接跳出
break;
}else{
i=j;
}
}
//向下递归
f(temp,n-1);
}
}