• 计数和数数(伯爵说”序列如下: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时,没有显示。

    jeyfang
  • 相关阅读:
    jvm内存模型学习
    sparkstreaming容错
    yum命里详解
    rpm包的安装及卸载
    git命令记录
    ElaticSearch基本查询
    入门elaticsearch
    Java网络编程学习(一)
    JAVA多线程之生产消费模型
    Java线程同步详解
  • 原文地址:https://www.cnblogs.com/jeyfang/p/5242667.html
Copyright © 2020-2023  润新知