您的位置:首页 > 理论基础

A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束

2017-04-07 09:06 411 查看
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

就是一种可能的情况。

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

技巧: 参加为1,不参加为0,不用boolean类型

   3 if(a+c<=1)

   4 if(b+d==1)
   .....

#include <iostream>
#include <cstdio>
using namespace std;
int main()
{
int a,b,c,d,e,f,g,h,i,j;
for(a=0;a<2;a++)
{
for(b=0;b<2;b++)
{
if(a==1&&b!=1)//a参加,b不参加
continue;//1
for(c=0;c<2;c++)
{
if(a+c==2)
continue;//3
for(d=0;d<2;d++)
{
if(c==0&&d==1)
continue;//2
if(b+d!=1)
continue;//4
for(e=0;e<2;e++)
{
for(f=0;f<2;f++)
{
for(g=0;g<2;g++)
{
if(c+g==1)
continue;//6
if(e==1&&f+g<2)
continue;//8
for(h=0;h<2;h++)
{
if(d+e+f+g+h<2)
continue;//5
if(f==1&&g+h>=1)
continue;//9
for(i=0;i<2;i++)
{

if(c+e+i>2)
continue;//7
for(j=0;j<2;j++)
{
if(i+j+h==0)
continue;//10
else
printf("%d %d %d %d %d %d %d %d %d %d\n",a,b,c,d,e,f,g,h,i,j );
}
}
}
}
}
}
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐