#include<stdio.h>
int main()
{
for(int i=1;i<=46;i++){
for(int j=i+2;j<=48;j++){
//for(int num1=i;num1<=46;num1++) //为什么这两行写了就会出来很多重复的呢?
//for(int num2=j;num2<=48;num2++)
int change=0;
change=i*(i+1)-i-i-1;
change+=j*(j+1)-j-j-1;
if(change==(2015-1225)){
printf("%d %d\n",i,j);
}
}
}
}
注释那两个for以后你有两组i,j满足条件,[10,27],[16,24]
打开注释后,你想想,当i=10,j=27时,里面两个for循环每次循环都能满足if条件,都能打印,所以一共会打印
(46-10+1)*(48-27+1)=814次
当i=16,j=24时,又会打印(46-16+1)*(48-24+1)=775次
楼主不信的话,可以弄个变量记录打印的次数
我用VS2005运行了你的代码,结果是:
编译错误的原因可能是for循环给它后面的第一个句子添加了一个默认的大括号,相当于
for(int num2=j;num2<=48;num2++)
{int change=0;}
所以此时后面的change就认为是没有声明的变量(因为超出了change变量的作用域.
另外我看你的程序是要寻找满足特定条件的i和j的值,所以你说明的两个for循环是没有作用的.
如果你想让解除for循环注释后编译成功,可以把change定义在外面,比如
int main()
{
int change;
....
之后的change前面不要带int,就行了.
外循环一次,内循环一遍,切记!