while ( 1 ) {
if ( a[i] < n )
{
// 如果皇后的位置尚未超出棋盘范围
// 需要检查第i行的皇后是否与前i-1行的皇后冲突
if ( is_conflict(a, i) )
{
// 如果冲突,尝试下一个位置
a[i]++;
continue;
}
if ( i >= n - 1 )
{
// 如果已经到最后一行,也即找到一个解,首先输出它
count++;
print_board(a, n);
// 然后尝试当前行的皇后的下一个位置
a[n-1]++;
continue;
}
// 没有冲突,尝试下一行
i++;
continue;
}
这里 if ( a[i] < n ) 中嵌套了 if ( is_conflict(a, i) ) { a[i]++; continue; },不用管is_conflict(a, i) 干嘛的,如果a[i]一直加,直到等于了n,那还会继续执行 if ( is_conflict(a, i) ) { a[i]++; continue; }吗?还是等于n时跳出了 if ( a[i] < n )语句,这里的if ( a[i] < n ) 的条件在嵌套的语句里还能有判断作用吗??
想知道这里面一个if嵌套执行情况
答案:2 悬赏:70 手机版
解决时间 2021-03-24 10:28
- 提问者网友:留有余香
- 2021-03-23 11:33
最佳答案
- 五星知识达人网友:枭雄戏美人
- 2021-03-23 11:57
先要明确一点 你最后少了一个大括号,你最后一行的大括号是匹配的 if ( a[i] < n )后的那个大括号。 如果在你最后一行大括号后没有任何别的东西,比如返回语句等等,仅仅是另一个大括号的话,你这个程序是死循环,因为你的while(1)表示始终是真,然后一直执行while loop里面的程序,假设你a[i]>=n了 他就会一遍一遍的比较然后重新比较 对于你的当a[i]=n后 是不会继续执行下面的if的
全部回答
- 1楼网友:不想翻身的咸鱼
- 2021-03-23 13:31
这个没什么区别,在前期~
但是在开发的时候呢,就是运行效率的问题了~
if(x > 0)
{
for(...)
}
这样if只需要判断一次~接着就运行for
for(....)
{
if(x > 0)
这样if就会判断很多次~
}
当然以后写多了自然而然的就不会说是出现这种问题了~
关于这些方面的问题,我建议你看下《高质量程序设计指南c++c语言(第3版) 》
看了以后蛮有感触的~
望采纳~
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯