统计数字问题

统计数字问题

时间: 1ms        内存:64M

描述:

一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1, 2,…,9。给定表示书的总页码的10 进制整数n (1≤n≤109) 。计算书的全部页码中分别用到多少次数字0,1,2,…,9。

输入:

输入数据只有1 行,给出表示书的总页码的整数n。

输出:

输出数据共有10行,在第k行输出页码中用到数字k-1 的次数,k=1,2,…,10。

示例输入:

11

示例输出:

1
4
1
1
1
1
1
1
1
1

提示:

参考答案(内存最优[748]):

#include <stdio.h>
int main()
{
	int m,a,i,j,sum=0,N;
	scanf("%d",&N);
	for(i=1;i<=N;i++)
	{
	    sum=0;
	    scanf("%d",&m);
	    for(j=1;j<=m;j++)
	    {
		scanf("%d",&a);
		sum+=a;
	    }
	    printf("%d\n\n",sum);
	}
	return 0;
}

参考答案(时间最优[0]):

#include <stdio.h>
int value;
int d[11];
void deal(int n)
{
if(n<=0)
return ;
int one,ten;
one=n%10;
n/=10;
ten=n;
for(int i=0;i<=one;i++)
d[i]+=value;
while(ten)
{
d[ten%10]+=(one+1)*value;
ten/=10;
}
for(int i=0;i<10;i++)
d[i]+=value*n;
d[0]-=value;
value*=10;
deal(n-1);
}
int main()
{
int a,i;
scanf("%d",&a);
for(i=0;i<10;i++)
d[i]=0;
value=1;
deal(a);
for(i=0;i<10;i++)
printf("%d\n",d[i]);
return 0;
} 

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注