UVa 1225 - Digit Counting - ACM/ICPC Danang 2007 解题报告

Posted ---

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UVa 1225 - Digit Counting - ACM/ICPC Danang 2007 解题报告相关的知识,希望对你有一定的参考价值。

1.题目大意

把前n$n\le 10000$个整数顺次写在一起:12345678910111213……计算0~9各出现了多少次。

 

2.思路

第一想法是打表,然而觉得稍微有点暴力。不过暂时没有想到更好的办法了,写完看了一下其它人的思路好像也差不多是打表的思路。

 

3.应注意的问题

(1)首先是格式问题,我第一次提交的时候PE了,因为没有意识到空格也会有影响。最开始我的最后一段代码是:

for(i=0;i<10;i++)
        printf("%d ",s[n][i]);    
    printf("\n");

但是事实证明应该写成:

 for(i=0;i<9;i++)
        printf("%d ",s[n][i]);
        printf("%d",s[n][9]);
    printf("\n");

(2)打表的时候容易忘记初始化的时候先清零一次。因此在以后用到打表的时候要注意这个问题。

 

4.代码

#include"stdio.h"
#include"string.h"
#define maxn 10001
int main()
{
    int s[maxn][10];
    int i,j,n,m,T;
    memset(s,0,sizeof(s));//数组清零 易漏
    for(i=1; i<maxn; i++)
    {
        m=i;
        for(j=0; j<10; j++)
            s[i][j]=s[i-1][j]; 
        while(m>0)
        {
            s[i][m%10]++;
            m/=10;
        }
    }
    scanf("%d",&T);
    while(T--)
    {
        scanf("%d",&n);
        for(i=0; i<9; i++)
            printf("%d ",s[n][i]);
        printf("%d",s[n][9]);
        printf("\n");
    }
    return 0;
}

  

 

 

参考书目:算法竞赛入门经典(第2版) 刘汝佳 编著

以上是关于UVa 1225 - Digit Counting - ACM/ICPC Danang 2007 解题报告的主要内容,如果未能解决你的问题,请参考以下文章

UVA 1225 Digit Counting(统计数位出现的次数)

(UVA)1225 --Digit Counting(数数字)

UVA-1225 Digit Counting

UVA 1225 Digit Counting

UVa-1225 Digit Counting(数数字)

紫书第三章练习题:UVA 1225 Digit Counting by 15邱盼威