算法设计:统计数字问题

来源:互联网 发布:法兰绒衬衫怎么洗 知乎 编辑:程序博客网 时间:2024/06/08 14:52
声明:代码仅用于新手交流,不足之处请多包涵;
      有问题请微信 sjh19960326


问题分析:

要求:输入一个正整数n(n>1);
      计算1~n的所有整数,一共用到了多少次0,1,2,3,4,5,6,7,8,9;
      整数6用6表示,而不是06,006等。
样例输入:11
样例输出:数字:0,1,2,3,4,5,6,7,8,9
                    次数:1,4,1,1,1,1,1,1,1,1

分析:1 新建一个长度为10的整形数组,分别存储0~9总共出现的次数;
索引n对应的值就是数字n出现的次数;
        int[] times = new int[10];
      2 遍历1~n,将得到的数字拆解成单位数,存入另一个整形数组;
        然后遍历得到的整形数组,得到n,则将times数组的n索引的值加一;
for(int i=1;i<=num;i++) {
String str = String.valueOf(i);
char[] cs = str.toCharArray();
for(int j=0;j<cs.length;j++) {
char[] chs = {cs[j]};
String temp = new String(chs);
int rel = Integer.valueOf(temp);
times[rel]++;
}
}
      3 遍历times数组,输出结果;
for(int i=1;i<=num;i++) {
String str = String.valueOf(i);
char[] cs = str.toCharArray();
for(int j=0;j<cs.length;j++) {
char[] chs = {cs[j]};
String temp = new String(chs);
int rel = Integer.valueOf(temp);
times[rel]++;
}

}

代码实现:

@Test
public void fn1_1_1() {
int num = new Scanner(System.in).nextInt();
//times存储0~9分别出现的次数,
int[] times = {0,0,0,0,0,0,0,0,0,0};
//核心算法,
for(int i=1;i<=num;i++) {
String str = String.valueOf(i);
char[] cs = str.toCharArray();
for(int j=0;j<cs.length;j++) {
char[] chs = {cs[j]};
String temp = new String(chs);
int rel = Integer.valueOf(temp);
times[rel]++;
}
}

System.out.print("数字: ");
for (int i = 0;i<10;i++) {
System.out.print(i+", ");
}
System.out.println();
System.out.print("次数:");
for (int i : times) {
System.out.print(i+", ");
}
}