鱼C论坛

 找回密码
 立即注册
查看: 2164|回复: 6

三重循环组合问题

[复制链接]
发表于 2014-5-23 21:33:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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");
                }
        }
}
组合.jpg 我只在跳出第三个循环后设置一个换行,为什么会有空行?求解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-5-23 21:49:04 | 显示全部楼层
←_← 当然了第二个循环执行了4次
目测会有4个换号符出现
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-23 22:21:23 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-23 23:09:16 | 显示全部楼层
用到三层循环!!!有点复杂!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-23 23:33:04 | 显示全部楼层
柴米油盐酱醋茶 发表于 2014-5-23 22:21
哇  还没学到那么深  不过谢谢你啊!

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

至于稍微深一点的思考,就想想如何优化算法吧,三层循环的确复杂了一点。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-24 22:10:33 | 显示全部楼层
理论上11*~44*应各占据一行(*代表1~4任意一个),这是因为你在第二层有输出换行
而空行是因为本行没有符合第三层循环中的条件(i != t && i != k && t != k),所以没有输出,更确切的讲就没符合(i != t ),后面不用考虑,从输出也可以看出没有输出的(空行)就是11,22,33,44开头的行
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-27 02:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表