鱼C论坛

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

三重循环组合问题

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

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

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

x
  1. #include<stdio.h>

  2. void main()
  3. {
  4.         int i,t,k;

  5.         for(i = 1;i < 5;i++)
  6.         {
  7.                 for(t = 1;t < 5;t++)
  8.                 {
  9.                         for(k = 1;k < 5;k++)
  10.                         {
  11. if(i != t && i != k && t != k) /*确保i t k不同*/
  12.                                 printf("%d%d%d\t",i,t,k);
  13.                         }
  14.                         printf("\n");
  15.                 }
  16.         }
  17. }
复制代码
组合.jpg 我只在跳出第三个循环后设置一个换行,为什么会有空行?求解
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-5-23 21:49:04 | 显示全部楼层
←_← 当然了第二个循环执行了4次
目测会有4个换号符出现
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-23 21:50:43 | 显示全部楼层
  1. #include<stdio.h>

  2. int main()
  3. {
  4.         int i,t,k;
  5.         bool bOpenNL=false;
  6.         for(i = 1;i < 5;i++)
  7.         {
  8.                 for(t = 1;t < 5;t++)
  9.                 {
  10.                         for(k = 1;k < 5;k++)
  11.                         {
  12.                                 if(i != t && i != k && t != k) /*确保i t k不同*/
  13.                                 {
  14.                                         printf("%d%d%d\t",i,t,k);
  15.                                          bOpenNL=true;  //添加一个bOpenNL的开关,执行到if判断语句内部时,
  16.                                                                          //下面的printf("\n")才开启
  17.                                  }
  18.                                        
  19.                         }
  20.                         //printf("\n");  //比如i=1,t=1时,第3层循环k无论是何值都不能进入if语句
  21.                                                          //于是进入执行了一次printf("\n")输出空行。。这就是第1个空行
  22.                                                          //i=t=2,3,4时都是一样的 空行。。。。
  23.                         if(bOpenNL)
  24.                          {
  25.                                 printf("\n");
  26.                                 bOpenNL=false;
  27.                         }
  28.                          
  29.                 }
  30.         }
  31.         return 0;
  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-23 22:21:23 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-23 23:09:16 | 显示全部楼层
用到三层循环!!!有点复杂!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

至于稍微深一点的思考,就想想如何优化算法吧,三层循环的确复杂了一点。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-10 02:41

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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