本文主要是介绍蓝桥杯-基础训练-逻辑判断,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
A、B、C、D、E、F、G、H、I、J
0、1、2、3、4、5、6、7、8、9
共10名学生有可能参加本次计算机竞赛,也可能不参加。因为某种原因,他们是否参赛受到下列条件的约束:false分析1. 如果A参加,B也参加; A&&!B2. 如果C不参加,D也不参加; !C&&D3. A和C中只能有一个人参加; A+C>14. B和D中有且仅有一个人参加; B+D!=15. D、E、F、G、H 中至少有2人参加; D+E+F+G+H<26. C和G或者都参加,或者都不参加; C!=G7. C、E、G、I中至多只能2人参加 C+E+G+I>28. 如果E参加,那么F和G也都参加。 E&&!(F&&G)9. 如果F参加,G、H就不能参加 F&&(G||H)10. 如果I、J都不参加,H必须参加 !I&&!J&&!H请编程根据这些条件判断这10名同学中参赛者名单。如果有多种可能,则输出所有的可能情况。每种情况占一行。参赛同学按字母升序排列,用空格分隔。
比如:
C D G J
就是一种可能的情况。多种情况的前后顺序不重要
最重要的还是仔细分析题目吧!!!没有什么其他好方法
太久没写代码了,这个一开始没想好,拖了很久。。。其实就是把false分析写好就行了,我不知道答案对不对。。。
#include<bits/stdc++.h>
using namespace std;
#define mem(a,b) memset(a,b,sizeof(a))
const double eps=3e-8;
const int mod=10;
const int maxn=2e5;
bool vis[11];
bool judge(){if(vis[0]&&!vis[1])return false;if(!vis[2]&&vis[3])return false;if(vis[0]+vis[2]>1)return false;if(vis[1]+vis[3]!=1)return false;if(vis[3]+vis[4]+vis[5]+vis[6]+vis[7]<2)return false;if(vis[2]!=vis[6])return false;if(vis[2]+vis[4]+vis[6]+vis[8]>2)return false;if(vis[4]&&!(vis[5]&&vis[6]))return false;if(vis[5]&&(vis[6]||vis[7]))return false;if(!vis[8]&&!vis[9]&&!vis[7])return false;return true;
}
int main(){for(int i=0;i<1024;i++){int temp=i;for(int j=9;j>=0;j--){vis[j]=temp%2;temp=temp/2;}if(judge()){//printf("Yes\t");for(int j=0;j<10;j++){if(vis[j])printf("%c",('A'+j));}printf("\n");}}return 0;
}
结果推荐阅读刑侦那个哈哈哈,我没怎么写注释,估计再让我写也要费点时间
这篇关于蓝桥杯-基础训练-逻辑判断的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!