逻辑推断

来源:互联网 发布:python编程(第四版) 编辑:程序博客网 时间:2024/04/30 22:30
A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:


   1. 如果A参加,B也参加;
   2. 如果C不参加,D也不参加;
   3. A和C中只能有一个人参加;
   4. B和D中有且仅有一个人参加;
   5. D、E、F、G、H 中至少有2人参加;
   6. C和G或者都参加,或者都不参加;
   7. C、E、G、I中至多只能2人参加   
   8. 如果E参加,那么F和G也都参加。
   9. 如果F参加,G、H就不能参加

   10. 如果I、J都不参加,H必须参加


请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能,则输出所有的可能情况。每种情况占一行。参赛同学按字母升序排列,用空格分隔。

比如:
C D G J
就是一种可能的情况。

多种情况的前后顺序不重要





dlb


解题思路:

显然题目输出的是所有可能性,所以穷举就ok,但我在做题时,犯了一个错误,就是没用数组,

导致

5. D、E、F、G、H 中至少有2人参加;

7. C、E、G、I中至多只能2人参加  

这两条语句表达起来有点麻烦,

但题目要去是输出所有可能性,所以即使不用数组:即暂时忽略这两条语句,代码如下,以后再在得出的结论中找到符合这两条语句的例子

另写一代码,输出即可

代码:

#include<iostream>
using namespace std;
int a,b,c,d,e,f,g,h,i,j;
bool judge(){
if(a==1&&b==0){
return 0;
}
if(c==0&&d==1){
return 0;
}
if(a==1&&c==1){
return 0;
}
if((b==1&&d==1)||(b==0&&d==0)){
return 0;
}
if((c==0&&g==1)||(c==1&&g==0)){
return 0;
}
if(e==1&&(f==0||g==0)){
return 0;
}
if(f==1&&(g==1||h==1)){
return 0;
}
if((i==0&&j==0)&&h==0){
return 0;
}
return 1;

}

int main(){
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++)
for(f=0;f<2;f++)
for(g=0;g<2;g++)
for(h=0;h<2;h++)
for(i=0;i<2;i++)
for(j=0;j<2;j++)
if(judge()){
if(a==1)cout<<"A"<<" ";
if(b==1)cout<<"B"<<" ";
if(c==1)cout<<"C"<<" ";
if(d==1)cout<<"D"<<" ";
if(e==1)cout<<"E"<<" ";
if(f==1)cout<<"F"<<" ";
if(g==1)cout<<"G"<<" ";
if(h==1)cout<<"H"<<" ";
if(i==1)cout<<"I"<<" ";
if(j==1)cout<<"J"<<" ";
cout<<endl;
}

return 0;


总结: 对于这种题型,不必想的太复杂,在做题中要以最快的方式最简单的方法做完。

if((b==1&&d==1)||(b==0&&d==0))第一次做没注意运算符的优先性问题,,忘了加括号,导致错误,,所以在今后的做题中一定要避免这种问题。


0 0
原创粉丝点击