P1554 梦中的统计

题目背景

Bessie 处于半梦半醒的状态。过了一会儿,她意识到她在数数,不能入睡。

题目描述

Bessie的大脑反应灵敏,仿佛真实地看到了她数过的一个又一个数。她开始注意每一个数码(0..9):每一个数码在计数的过程中出现过多少次?

给出两个整数M 和N (1 ≤M ≤N ≤2,000,000,000 以及N-M ≤500,000),求每一个数码出现了多少次。

例如考虑序列129--137: 129, 130, 131, 132, 133, 134, 135, 136, 137。统计后发现:

0出现了1次,1出现了10次,2出现了2次,3出现了9次,4出现了1次,5出现了1次,

6出现了1次,7出现了1次,8出现了0次,9出现了1次。

输入输出格式

输入格式:

第1行: 两个用空格分开的整数M 和N

输出格式:

第1行: 十个用空格分开的整数,分别表示数码(0..9)在序列中出现的次数。

输入输出样例

输入样例#1: 复制

129 137

输出样例#1: 复制

1 10 2 9 1 1 1 1 0 1

思路:

1、

/ 就是除号嘛。但是它和我们平时的除法不太一样。它在处理int的时候,由于只能存整数,所以除完后存的数会丢掉小数。(注意:不是四舍五入)

例如:123/4=30(int型)

那么我们可以利用这个特性。我们如果把一个int型的数/10,它就丢掉了它的最后一位

例如:236/10=23(最后一位没了)

2、

% 求余数,也称作模。就是求一个数除另外一个数的余数。

例如:123/4=30···3。那么123%4=3。

这个东西也是一个很好用的东西。和上面类似,我们可以把1个数%10,求他的最后一位。

例如:236%10=6 (最后一位)

综合

有了上面这两个方法,我么就可以这样做:取一个数的最后一位(%10),再把它的最后一位扔掉,记录。然后再取新的最后一位,再把它扔掉,记录。循环直到这个数变成0(无法再取)

画个表就是这样的:

numa

1234-----取4,记录,扔掉4。

123-------取3,记录,扔掉3。

12---------取2,记录,扔掉2。

1-----------取1,记录,扔掉1。

0(结束)

这是处理一个数的过程,把实现这个过程的程序放进枚举循环里就行了。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a=sc.nextInt();
        int b=sc.nextInt();
        int[] js=new int[10];
        for(int i=a;i<=b;i++){
            for(int j=i;j>0;j/=10) {
                js[j % 10]++;
            }
        }
        for(int i=0;i<=9;i++){
            System.out.print(js[i]+" ");
        }
    }
}

猜你喜欢

转载自blog.csdn.net/MimosaX/article/details/89044042