C语言记数问题 NOIP2013普及组习题 1.记数问题 (count.cpp/c/pas) 【问题描述】 试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1、2、3、4、5、6、7、8、9、10

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/30 12:52:59

C语言记数问题 NOIP2013普及组习题 1.记数问题 (count.cpp/c/pas) 【问题描述】 试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1、2、3、4、5、6、7、8、9、10
C语言记数问题 NOIP2013普及组习题
1.记数问题
(count.cpp/c/pas)
【问题描述】 试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1、2、3、4、5、6、7、8、9、10、11中,数字1出现了4次.【输入】
输入文件名为count.in.
输入共1行,包含2个整数n、x,之间用一个空格隔开.【输出】
输出文件名为count.out.
输出共1行,包含一个整数,表示x出现的次数.
对了.这个要编程出这个程序,对了再加50分!

C语言记数问题 NOIP2013普及组习题 1.记数问题 (count.cpp/c/pas) 【问题描述】 试计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次?例如,在1到11中,即在1、2、3、4、5、6、7、8、9、10
#include<stdio.h>
#include<string.h>
void count(int a[],int n)
{
\x09int mod,i,temp=1,nn=n;
\x09for(i=0;i<10;a[i]=0,i++);
\x09if(n<10)
\x09{
\x09\x09for(i=1;i<n;a[i]=1,i++);
\x09\x09return ;
\x09}\x09\x09
\x09while(n>=10)
\x09{
\x09\x09mod=n%10;
\x09\x09n/=10;
\x09\x09for(i=0;i<10;i++)
\x09\x09\x09a[i]+=temp*n;
\x09\x09for(i=1;i<=mod-1;i++)
\x09\x09\x09a[i]+=temp;
\x09\x09a[mod]+=( mod==0 ? nn%temp-temp+1 : nn%temp+1 );  //  ?
\x09\x09temp*=10;
\x09}
\x09for(i=1;i<=n-1;i++)
\x09\x09a[i]+=temp;
\x09a[n]+=nn-n*temp+1;
}
int main()
{
\x09int n1,n2,a[10],b[10],i;
\x09while( scanf("%d%d",&n1,&n2)!=EOF && n1 && n2 )
\x09{
\x09\x09if(n1>n2)
\x09\x09\x09n1=n1+n2,n2=n1-n2,n1=n1-n2;
\x09\x09count(a,n1-1);
\x09\x09count(b,n2);
\x09\x09for(i=0;i<10;i++)
\x09\x09\x09printf("%d ",b[i]-a[i]);
\x09\x09printf("\n");
\x09}
\x09return 0;
}

参考这段代码哈,这是我在ACM OJ上AC过的代码,满意请采纳.