900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > C语言练习 五名学生有可能参加计算机竞赛 根据下列条件判断哪些人参加了竞赛

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

时间:2018-08-31 13:26:38

相关推荐

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语句,对应五个条件;

最后输出计算结果;

源代码

废话不多说,上代码!

#include<stdio.h>int 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循环呢?好像也是有办法的🤔

#include<stdio.h>int 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条件里要给条件或先加括号啦~

来看运行结果

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。