三重循环组合问题
#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");
}
}
}我只在跳出第三个循环后设置一个换行,为什么会有空行?求解 ←_← 当然了第二个循环执行了4次
目测会有4个换号符出现 #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;
}
elvo 发表于 2014-5-23 21:50 static/image/common/back.gif
哇还没学到那么深不过谢谢你啊!{:1_1:} 用到三层循环!!!有点复杂! 柴米油盐酱醋茶 发表于 2014-5-23 22:21 static/image/common/back.gif
哇还没学到那么深不过谢谢你啊!
额。。。这就是你的程序,注释中解释了一下为什么有4个空行。。
然后小小改动了一下,加了一个bool开关而已,你能看懂的
至于稍微深一点的思考,就想想如何优化算法吧,三层循环的确复杂了一点。。 理论上11*~44*应各占据一行(*代表1~4任意一个),这是因为你在第二层有输出换行
而空行是因为本行没有符合第三层循环中的条件(i != t && i != k && t != k),所以没有输出,更确切的讲就没符合(i != t ),后面不用考虑,从输出也可以看出没有输出的(空行)就是11,22,33,44开头的行
页:
[1]