#include
int main()
{
int m,n,i,j,k;
int t[10]={0};
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++)
{j=i;while(j>=0)
{k=j%10;j/=10;
if(k==0)t[0]++;
else if(k==1)t[1]++;
else if(k==2)t[2]++;
else if(k==3)t[3]++;
else if(k==4)t[4]++;
else if(k==5)t[5]++;
else if(k==6)t[6]++;
else if(k==7)t[7]++;
else if(k==8)t[8]++;
else if(k==9)t[9]++;
}
}for(i=0;i<=9;i++)
printf("%d ",t[i]);
return 0;
}
好像超时了,不知道哪错了,求解!!
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int m, n, res[10];
int main() {
cin >> m >> n;
for (int i = m; i <= n; i++) {
int t = i;
while (t) {
res[t % 10]++;
t /= 10;
}
}
for (int i = 0; i < 9; i++) {
cout << res[i] << " ";
}
cout << res[9] << endl;
return 0;
}
你这份代码的错误在于在循环内部有一个无限循环的情况:
while(j>=0)
当j变为0时,这个循环将永远不会停止。为了避免这种情况,可以将它改为以下内容:
while(j>0)
这样,当j变为0时,循环将停止。
思路是正确的,但是代码实现有点繁琐,代码量比较大。你可以使用循环和数组来简化代码,例如:
#include<stdio.h>
int main()
{
int m, n;
int t[10] = {0};
scanf("%d%d", &m, &n);
for(int i = m; i <= n; i++)
{
int j = i;
while(j > 0)
{
t[j % 10]++;
j /= 10;
}
}
for(int i = 0; i < 10; i++)
{
printf("%d ", t[i]);
}
return 0;
}
#include<stdio.h>
int main()
{
int m,n,i,j,k;
int t[10]={0};
scanf("%d %d",&m,&n);
for(i=m;i<=n;i++)
{
j=i;
if (i==0)
t[i]++;
while(j>0)
{
k=j%10;
j/=10;
t[k]++;
}
}
for(i=0;i<=9;i++)
printf("%d ",t[i]);
return 0;
}