#include <stdio.h>
#include <iostream>
#include<stack>
#include<queue>
#include<cmath>
#include<stdlib.h>
#include<string.h>
#include<cstring>
#include<algorithm>
#include<cstdio>
using namespace std;
/*
A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:
1. 如果A参加,B也参加;
2. 如果C不参加,D也不参加;
3. A和C中只能有一个人参加; A + C <= 1
4. B和D中有且仅有一个人参加; B + D == 1
5. D、E、F、G、H 中至少有2人参加;D + ... >= 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
就是一种可能的情况。
*/
int a[2]={0,1};
char b[10]={ 'A','B','C','D','E','F','G','H','I','J'};
int vis[10];
int re[10];
int sss(int n[])
{
int flag=1;
if(n[0]==1)
{
if(n[1]!=1) flag=0;
}
if(n[2]==0)
{
if(n[3]!=0) flag=0;
}
if(n[0]+n[2]>1) flag=0;
if(n[1]+n[3]!=1) flag=0;
if(n[3]+n[4]+n[5]+n[6]+n[7]<2) flag=0;
if(n[2]!=n[6]) flag=0;
if(n[2]+n[4]+n[8]+n[6]>2) flag=0;
if(n[4]==1)
{
if(n[5]!=1)flag=0;
if(n[6]!=1)flag=0;
}
if(n[5]==1)
{
if(n[6]==1)flag=0;
if(n[7]==1)flag=0;
}
if(n[8]==0)
if(n[9]==0)
if(n[7]==0)flag=0;
if(flag==1) {
for(int i=0;i<10;i++)
if(re[i]==1) cout<<b[i]<<" ";
cout<<endl;
return 1;}return 0;
}
void fun(int step)
{
if(step==10) {
sss(re);
return;}
for(int i=0;i<2;i++)
{
re[step]=a[i];
fun(step+1);
}
}
int main( )
{
fun(0);
}
【水汐の蓝桥】A、B、C、D、E、F、G、H、I、J 共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:
最新推荐文章于 2021-05-19 02:15:45 发布