C语言练习 五名学生有可能参加计算机竞赛,根据下列条件判断哪些人参加了竞赛

目录

题目描述

思考:

源代码

运行结果

优化

来看运行结果


题目描述

A、B、C、D、E五名学生有可能参加计算机竞赛,根据下列条件判断哪些人参加了竞赛:

(1)A参加时,B也参加;

(2)B和C只有一个人参加;

(3)C和D或者都参加,或者都不参加;

(4)D和E中至少有一个人参加;

(5)如果E参加,那么A和D也都参加。

思考:

参加和不参加是两种互斥的情况,可以用1表示参加,用0表示不参加;

要逐个判断是否参加,干脆用循环;

在循环里嵌套if语句,对应五个条件;

最后输出计算结果;

源代码

废话不多说,上代码!

#includeint main(){int a=0,b=0,c=0,d=0,e=0;for(a=0; a<2; a++) for(b=0; b<2; b++) for(c=0; c<2; c++) for(d=0; d<2; d++)for(e=0; e<2; e++){if(1==a && 0==b)break;else if(b==c)break;else if(c!=d)break;else if(0==d&&0==e)break;else if(1==e&&(0==a||0==d))break;goto here;}here:printf("%d%d%d%d%d\n", a,b,c,d,e);return 0;
}

嵌套的for循环确保所有参赛组合都参与计算;

五个if()中是不符合题意的组合类型,我称为“筛选”,最后筛选出来之后得到的就是符合题意的组合类型,只剩一步,输出就行;

运行结果

优化

不用goto语句,如何跳出整整5重for循环呢?好像也是有办法的🤔

#includeint main(){int a=0,b=0,c=0,d=0,e=0;for(a=0; a<2; a++)for(b=0; b<2; b++)for(c=0; c<2; c++)for(d=0; d<2; d++)for(e=0; e<2; e++){if(a && !b)break;else if(b==c)break;else if(c!=d)break;else if(!d&&!e)break;else if(e&&(!a||!d))break;printf("%d%d%d%d%d\n", a,b,c,d,e);	return 0;				}
}

直接在打印完参赛者名单后return 0;

顺便简化一下循环条件的书写:

 a=1;  "!"是取反符号;

if(a)    ------------------------    if(a==1)

if(!a)   ------------------------    if(a==0)

另外,关于&&和||的优先级:

c语言保证&&和||的求值顺序是从左到右

 所以第5个if条件里要给条件或先加括号啦~

来看运行结果


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部