今天帮同学看一个题目的时候发现一个这样的状况
题目
已知24有8个因子,而24正好被8整除。求[100,300]之间所有能被其因子的个数整除的整数中最大的数。
他写的源码
#include<stdio.h>
void main()
{ int i,j,s=0;
for(i=300;i>=100;i--)
{
for(j=1;j<=i;j++)
{if(i%j==0)s++;}
if(i%s==0)break;
}
printf("%d\n",i);
}
输出99
经过我检查
我认为正确答案应该是296
把上面代码中的for(j=1;j<=i;j++)改为for(j=1;j<i;j++)后
得到正确答案
但是在我向他解释原因的时候 我加了一点和j变量无关的东西
程序变为
#include<stdio.h>
void main()
{ int r,i,j,s=0,jj[99];
for(r=0;r<100;r++)
{ jj[r]=r+1;
printf("%3d",jj[r]);}
for(i=300;i>=100;i--)
{
for(j=1;j<i;j++)
{
if(i%j==0)
s+=1;
}
if(i%s==0)
break;
}
printf("\n%d\n",i);
}
此时程序输出
数字1~100 (懒得打了)
99
所以问题很奇怪
我前面的 for(r=0;r<100;r++)
{ jj[r]=r+1;
printf("%3d",jj[r]);}
并没有引用j 或者i ,都是无关的东西
然而为什么会导致后面的答案出错?
而我将这段删除后,输出的确是正确的296?
求高手解答