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(统计数位出现的次数)