这三道题的做法基本相同 ,所以写的较为简便。
题目1:某件事是甲,乙,丙,丁4人干的,询问4人后回答如下:1):甲说是丙干的;2)乙说我没干;3):丙说甲讲的不对;4):丁说是甲干的。若其中3人说的是对的,1人说的是错的。问是谁干的?
1:设命题a,b,c,d分别表示是甲,乙,丙,丁干的,翻译每句话后即可用编程实现,具体代码如下:
#include<iostream>
using namespace std;
int main(){
int a,b,c,d,q,r,s,m;//a,,b,c,d分别表示是这件事是甲,乙,丙,丁干的 ,q,r,s,m分别表示四句话翻译后的表达式
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++){
q=(a||b||c||d)&&!b&&!c&&(a&&!b&&!c&&!d);
r=(!a&&!b&&c&&!d)&&b&&!c&&(a&&!b&&!c&&!d);
s=(!a&&!b&&c&&!d)&&!b&&c&&(a&&!b&&!c&&!d);
m=(!a&&!b&&c&&!d)&&!b&&!c&&!(a&&!b&&!c&&!d);
if(q||r||s||m){
if(a==1) cout<<"甲干的";
if(b==1) cout<<"乙干的";
if(c==1) cout<<"丙干的";
if(d==1) cout<<"丁干的";
}
}
}
}
}
return 0;
}
题目2:在某次研讨会的中间休息时间,3名与会者根据王教授的口音对他是哪个省市的人判断如下:
甲:王教授不是苏州人,是上海人。
乙:王教授不是上海人,是苏州人。
丙:王教授既不是上海人,也不是杭州人。
#include<iostream>
using namespace std;
int main(){
int p,q,r,a1,a2,a3,a4,a5,a6;//p,q,r分别表示王教授是苏州,上海,杭州人;
for(int p=0;p<=1;p++)
for(int q=0;q<=1;q++)
for(int r=0;r<=1;r++)
a1=(!p&&q)&&((p&&q)||(!p&&!q))&&(q&&r);//a1~a6代表翻译后的六种可能情况;
a2=(!p&&q)&&(!p&&q)&&((!q&&r)||(q&&!r));
a3=((!p&&!q)||(p&&q))&&(p&&!q)&&(q&&r);
a4=((!p&&!q)||(p&&q))&&(!p&&q)&&(!q&&!r);
a5=(p&&!q)&&((p&&q)||(!p&&!q))&&((!q&&r)||(q&&!r));
a6=(p&&!q)&&((p&&q)||(!p&&!q))&&(!q&&!r);
if((a1||a2|a3||a4||a5||a6)&&(p+q+r==1)){
if(p==1) cout<<"王教授是 苏州人";
if(q==1) cout<<"王教授是 上海人";
if(r==1) cout<<"王教授是 杭州人";
}
return 0;
}
题目三:29:在某班班委成员的选举中,已知王小红、李强、丁金生三位同学被选进了班委会,该班的甲,乙,两三名学生预言如下。
甲说:王小红为班长,李强为生活委员。
乙说:丁金生为班长,王小红为生活委员。
丙说:李强为班长,王小红为学习委员。
班委会分工名单公布后发现,甲、乙、丙三人都恰好猜对了一半。问:王小红,李强,丁金生各任何职?
解法见如下代码:
#include<iostream>
using namespace std;
int main(){
int a,b,c,d,e,f;//a:王是班长,b:丁是班长,c:李强是班长,d:李强是生活委员,e:王是生活委员,f:王是学习委员;
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++){
for(int f=0;f<=1;f++){
if(((a&&!d)||(!a&&d))&&((b&&!e)||(!b&&e))&&((c&&!f)||(!c&&f))&&(a+b+c==1)&&(d+e==1)&&(a+e+f==1)){
if(a==1) cout<<"王是班长"<<endl;
if(b==1) cout<<"丁是班长"<<endl;
if(c==1) cout<<"李强是班长"<<endl;
if(d==1) cout<<"李强是生活委员"<<endl;
if(e==1) cout<<"王是生活委员"<<endl;
if(f==1) cout<<"王是学习委员"<<endl;
}
}
}
}
}
}
}
return 0;
}