2 baby00qi baby00qi 于 2016.03.10 16:32 提问

关于重复输出的问题,求大神帮我看看
c
 #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);
                    }       
        }
    }

}

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.03.10 17:00
已采纳

注释那两个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次
楼主不信的话,可以弄个变量记录打印的次数

Beluma123
Beluma123   2016.03.10 16:47

我用VS2005运行了你的代码,结果是:

注释掉你说明的两个for循环时的结果

图片说明

解除那两个for循环中的任意一个就编译错误

图片说明
编译错误的原因可能是for循环给它后面的第一个句子添加了一个默认的大括号,相当于
for(int num2=j;num2<=48;num2++)
{int change=0;}
所以此时后面的change就认为是没有声明的变量(因为超出了change变量的作用域.
另外我看你的程序是要寻找满足特定条件的i和j的值,所以你说明的两个for循环是没有作用的.
如果你想让解除for循环注释后编译成功,可以把change定义在外面,比如
int main()
{
int change;
....
之后的change前面不要带int,就行了.

ensey
ensey   2016.03.10 16:51

外循环一次,内循环一遍,切记!

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!