柴米油盐酱醋茶 发表于 2014-5-23 21:33:58

三重循环组合问题

#include<stdio.h>

void main()
{
        int i,t,k;

        for(i = 1;i < 5;i++)
        {
                for(t = 1;t < 5;t++)
                {
                        for(k = 1;k < 5;k++)
                        {
if(i != t && i != k && t != k) /*确保i t k不同*/
                                printf("%d%d%d\t",i,t,k);
                        }
                        printf("\n");
                }
        }
}我只在跳出第三个循环后设置一个换行,为什么会有空行?求解

牡丹花下死做鬼 发表于 2014-5-23 21:49:04

←_← 当然了第二个循环执行了4次
目测会有4个换号符出现

elvo 发表于 2014-5-23 21:50:43

#include<stdio.h>

int main()
{
        int i,t,k;
        bool bOpenNL=false;
        for(i = 1;i < 5;i++)
        {
                for(t = 1;t < 5;t++)
                {
                        for(k = 1;k < 5;k++)
                        {
                                if(i != t && i != k && t != k) /*确保i t k不同*/
                                {
                                        printf("%d%d%d\t",i,t,k);
                                       bOpenNL=true;//添加一个bOpenNL的开关,执行到if判断语句内部时,
                                                                       //下面的printf("\n")才开启
                               }
                                       
                        }
                        //printf("\n");//比如i=1,t=1时,第3层循环k无论是何值都不能进入if语句
                                                       //于是进入执行了一次printf("\n")输出空行。。这就是第1个空行
                                                       //i=t=2,3,4时都是一样的 空行。。。。
                        if(bOpenNL)
                       {
                                printf("\n");
                                bOpenNL=false;
                        }
                       
                }
        }
        return 0;
}

柴米油盐酱醋茶 发表于 2014-5-23 22:21:23

elvo 发表于 2014-5-23 21:50 static/image/common/back.gif


哇还没学到那么深不过谢谢你啊!{:1_1:}

by024 发表于 2014-5-23 23:09:16

用到三层循环!!!有点复杂!

elvo 发表于 2014-5-23 23:33:04

柴米油盐酱醋茶 发表于 2014-5-23 22:21 static/image/common/back.gif
哇还没学到那么深不过谢谢你啊!

额。。。这就是你的程序,注释中解释了一下为什么有4个空行。。
然后小小改动了一下,加了一个bool开关而已,你能看懂的

至于稍微深一点的思考,就想想如何优化算法吧,三层循环的确复杂了一点。。

whj 发表于 2014-5-24 22:10:33

理论上11*~44*应各占据一行(*代表1~4任意一个),这是因为你在第二层有输出换行
而空行是因为本行没有符合第三层循环中的条件(i != t && i != k && t != k),所以没有输出,更确切的讲就没符合(i != t ),后面不用考虑,从输出也可以看出没有输出的(空行)就是11,22,33,44开头的行
页: [1]
查看完整版本: 三重循环组合问题