题解 P1239 【计数器】

· · 题解

最短代码!!!

本题并没有这么难,我们可以利用类似于散列法来解决:

首先,我们把从1到n的数一位位来%10,把余数储存起来,最后输出a[0]到a[9]的余数。

下面是AC代码:

#include <iostream>
using namespace std;
int a[10000];
int main(){
    int i,j,k,n,s1,s2;
    cin>>n;
    for(i=1;i<=n;i++){
        k=i;
        while(k>0){
            s1=k%10;
            a[s1]++;
            k/=10;
        }
    }
    for(i=0;i<=9;i++)cout<<a[i]<<endl;
}

求管理员大佬给过!!!