知识目标
回顾循环嵌套的综合应用
学习目标
熟练应用循环嵌套
讲一讲
课外活动
问题描述:
现有一项课外活动需要 A,B,C,D,E 五人去完成。已知在完成此项任务时
有以下条件限制:
1. A ,C 不能都去;
2. B ,C 不能都不去;
3. 如果 C 去了,D、E 必须去并且只能去一个;
4. B,C,D 不能都去;
5. 如果 B 去了,D、E 不能都去。
现在需要你编程找到所有符合条件的人员组合。
样例输出:
0 0 1 0 1
0 0 1 1 0
0 1 0 0 0
0 1 0 0 1
0 1 0 1 0
0 1 1 0 1
1 1 0 0 0
1 1 0 0 1
1 1 0 1 0
过程分析:
1. 我们用 a,b,c,d,e 来表示五人的状态,用 0 ,1 来枚举状态: 1 表示去, 0 表示 不去。则穷举情况如下:
2. 使用 a,b,c,d,e 进行条件模拟如下:
完整代码:
#include <iostream>
using namespace std;
int main(){
int a,b,c,d,e;
for(int a=0;a<=1;a++)
for(int b=0;b<=1;b++)
for(int c=0;c<=1;c++)
for(int d=0;d<=1;d++)
for(int e=0;e<=1;e++)
if(!(a&&c)&&(b||c)&&((c&&(d&&!e||!d&&e))||!c)
&&!(b&&c&&d)&&(b&&(!(d&&e))||!b))
cout<<a<<“ ”<<b<<“ ”<<c<<“ ”<<d<<“ ”<<e<<endl;
return 0;
}
名侦探柯南
问题描述:
柯南在调查一起盗窃案件时,对涉及到的四名嫌疑人 A ,B, C, D 进行
了审问。四人供述如下:
A :罪犯在 B, C, D 三人中;
B :我没作案,是 C 干的;
C :A 和 D 有一个是罪犯;
D :B 说的对;
经过充分论证,可以确定四人中只有两人说了真话,且罪犯只有一人。请你写一段程序来帮助好朋友柯南确定几名嫌疑人的身份。
样例输出:
0 0 0 1
思维过程:
代码如下:
int a=0,b=0,c=0,d=0,l1=0,l2=0,l3=0,l4=0;
for(a=0;a<=1;a++)
for(b=0;b<=1;b++)
for(c=0;c<=1;c++)
for(d=0;d<=1;d++){
l1=(b+c+d==1);
l2=(!b&&c);
l3=(a+d==1);
l4=l2;
if(l1+l2+l3+l4==2&&a+b+c+d==1)
cout<<a<<" "<<b<<" "<<c<<" "<<d;}
三国狼人杀
问题描述:
三国时期,刘,关,张,赵四人闲来无事决定一起玩狼人杀。已知牌面有三种身份:狼人、强盗和平民。他们请来孔明做法官,第一夜之后,孔明已经知道四人当中有两个平民,其余两人为强盗和狼人。四人开始发言:
刘:张是强盗,赵是狼人;
张:刘是强盗;
关:强盗和狼人在刘和张当中,但不确定具体身份;
赵:强盗和狼人在关和张当中,但不确定具体身份;
孔明善于识人,看出四人当中有两人撒谎了。请你来编程帮孔明列出四人身份的所 有情况。
要求:用 a ,b ,c ,d 来表示四人编号,用0,1,2 来枚举平民,狼人,强盗三种身份。输出顺序为:刘备,关羽,张飞,赵云。
输出格式:
2 0 1 0
思维过程:
a,b,c,d分别表示刘、关、张、赵。0表示平民,1表示狼人,2表示强盗。
使用l1,l2,l3,l4表示四人说话的真伪性,模拟条件如下:
完整代码:
#include<iostream>
using namespace std;
int main(){
int a,b,c,d,l1,l2,l3,l4;
for(a=0;a<=2;a++){
for(b=0;b<=2;b++){
for(c=0;c<=2;c++){
for(d=0;d<=2;d++){
l1=(c==2&&d==1);
l2=(a+c==3);
l3=(a==2);
l4=(b+c==3);
if(l1+l2+l3+l4==2&&a+b+c+d==3){
cout<<a<<" "<<b<<" "<<c<<" "<<d<<endl;
}
}
}
}
}
}
创作不易,请多多鼓励!