随笔-40  评论-12  文章-0 

计数和数数(伯爵说”序列如下:1, 11, 21)

在计蒜客中遇到一个这样的题目:

伯爵说”序列如下:1, 11, 21, 1211, 111221, ...1 读作 "one 1" 或者 11。11 读作 "two 1s" 或者21。21 读作 "one 2, one 1" 或者 1211。

格式:多组输入,读到文件结束。每组输入给定一个整数n,输出第n个序列。(1<=n<=30)

注意:整数序列以字符串的形式表示。

样例

输入:

6

输出:

312211

我的思路是根据数数的方式,由前一个数得到后一个数,但是代码测试没有通过,但是已经实现能够输出,但是第30个数及其以后的数就不能显示了,不知道是为什么?
代码如下:
 1 import java.util.Scanner;
 2 public class Main {
 3     /**
 4      * @param args
 5      */
 6     public static void main(String[] args) {
 7         int number;
 8         Scanner read=new Scanner(System.in);
 9         number=read.nextInt();
10         String[] array=new String[number];
11         switch(number){
12         case 1:
13             array[0]="1";
14             break;
15         case 2:
16             array[0]="1";
17             array[1]="11";
18             break;
19         default:
20             array[0]="1";
21             array[1]="11";
22             String result="";
23             for(int i=2;i<number;i++){  
24                 String last=array[i-1];  //得到上一个数
25                 int count=1;
26                 int j=0;
27                 for(j=0;j<last.length()-1;j++){  //对上一个数每一个数字分析
28                     if(last.charAt(j)==last.charAt(j+1)){  //如果该数字与后一个数字相同,则计数加一
29                         count++;
30                     }
31                     else {  //如果不同,则说明该数字已经是与下一个数字不同的边界,则把获得的计数和该边界数字组合写入result结果
32                         result+=String.valueOf(count)+last.charAt(j);
33                         count=1;
34                         if(j==last.length()-2 && last.charAt(j)!=last.charAt(j+1)){  //特殊情形,当面临倒数第二个数字时,判断最后一个数字与倒数第二个数字是否相同
35                             result+="1"+last.charAt(j+1);  //比如数111221,当运行到倒数第二位时,2与1不同,而恰恰此时为循环的最后一次,不能运行到最后一个数字,所以此时将最后一个数字的写入结果
36                         }
37                     }
38                 }
39                 if(count!=1){
40                     result+=String.valueOf(count)+last.charAt(j);    //对特殊处理,如1211,最后两位在循环结束时来不及写入结果而跳出循环,对count判断,如果大于1,则写入结果
41                 }
42                 array[i]=result;
43                 result="";
44                 
45         }        
46         }
47         System.out.println(array[number-1]);
48     }
49 }

运行结果:

而测试数据30时,没有显示。

posted on 2016-03-04 16:52 jeyfang 阅读(...) 评论(...) 编辑 收藏