题目很简单,就只是在m和n数字范围内,阿拉伯数字0-9出现的次数。
一代码 在论坛里找的
#include <iostream>
using namespace std;
int main()
{
int a[10]={0};
int M,N;
cin>>M>>N;
for(M;M<=N;M++)
{
int i=M;
while(i)
{
a[i%10]++;
i=i/10;
}
}
for(int j=0;j<10;j++)
{
cout<<a[j]<<" ";
}
return 0;
}
二代码 我自己写的,根本不成功,然后我一点点向一代码对齐,发现了一个我觉得不可能的现象
#include <iostream>
using namespace std;
int main()
{
int a[10] = { 0 };
int M, N;
cin >> M >> N;
for (int i=M; i <= N; M++)
//只有这里不一样,我和一代码的区别,但是我觉得没
//啥问题的,就是不能运行
{
while (i)
{
a[i % 10]++;
i = i / 10;
}
}
for (int j = 0; j < 10; j++)
{
cout << a[j] << " ";
}
return 0;
}
有没有好人能够解答迷惑,谢谢!*3
改了之后还是不行
你可以看下那个for循环执行的流程就知道了,你的循环的终止条件是i<=N,这个循环是不会结束的,因为i=M在for循环中只调用了一次
i++不是M++,
#include <iostream>
using namespace std;
int main()
{
int a[10]={0};
int M,N;
cin>>M>>N;
for(int i=M;i<=N;i++)
{
int j=i;
while(j)
{
a[j%10]++;
j=j/10;
}
}
for(int j=0;j<10;j++)
{
cout<<a[j]<<" ";
}
return 0;
}
问题在于你的第二个代码中for循环中的计数器不是i,而是M,所以程序会进入死循环。修改为i即可:
#include <iostream>
using namespace std;
int main()
{
int a[10] = { 0 };
int M, N;
cin >> M >> N;
for (int i=M; i <= N; i++)
{
int j = i;
while (j)
{
a[j % 10]++;
j = j / 10;
}
}
for (int j = 0; j < 10; j++)
{
cout << a[j] << " ";
}
return 0;
}
这个代码的思路和一楼的代码是一样的,使用一个数组a来记录0-9出现的次数,然后遍历M到N范围内的所有数字,对于每个数字,使用while循环不断除以10取余数,并且把余数对应的元素加1,直到这个数字变为0。最后输出数组a即可。
不应该啊,我记得当时我写的就是i++,我发完问题的时候还在想是不是没改i++,我记得我是i++的时候也是错误的,等我回去试试吧,谢谢各位