挺有趣的题目 比赛名次 谁是凶手 田忌赛马

题目1

5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三;
B选手说:我第二,E第四;
C选手说:我第一,D第二;
D选手说:C最后,我第三;
E选手说:我第四,A第一:
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次

#include <bits/stdc++.h>
using namespace std;
int rka, rkb, rkc, rkd, rke;
bool truea, trueb, truec, trued, truee; 
int main()
{
	for(rka=1; rka<=5; ++rka){	//枚举A可能的名次 
		for(rkb=1; rkb<=5; ++rkb){	//枚举B可能的名次 
			for(rkc=1; rkc<=5; ++rkc){	//枚举C可能的名次 
				for(rkd=1; rkd<=5; ++rkd){	//枚举D可能的名次 
					for(rke=1; rke<=5; ++rke){	//枚举E可能的名次 
						truea=(rkb==2 && rka!=3) || (rkb!=2 && rka==3);			//一真一假两种取或, 最后必然要为真 
						trueb=(rkb==2 && rke!=4) || (rkb!=2 && rke==4);			//一真一假两种取或, 最后必然要为真
						truec=(rkc==1 && rkd!=2) || (rkc!=1 && rkd==2);			//一真一假两种取或, 最后必然要为真
						trued=(rkc==5 && rkd!=3) || (rkc!=5 && rkd==3);			//一真一假两种取或, 最后必然要为真
						truee=(rke==4 && rka!=1) || (rke!=4 && rka==1);			//一真一假两种取或, 最后必然要为真
						if(truea && trueb && truec && trued && truee){			//五个人说的两句话都是一真一家 
							 if(rka!=rkb && rka!=rkc && rka!=rkd && rka!=rke){	//A和其他四个人的排名都不相同 
							 	 if(rkb!=rkc && rkb!=rkd && rkb!=rke){			//B和剩余三个人的排名都不相同 
							 	 	if(rkc!=rkd && rkc!=rke){					//C和剩余两个人的排名都不相同
							 	 		if(rkd!=rke){							//D和剩余一个人的排名不相同
							 	 			cout << "A: " << rka << endl;		 
							 				cout << "B: " << rkb << endl;
							 				cout << "C: " << rkc << endl;
							 				cout << "D: " << rkd << endl;
							 				cout << "E: " << rke << endl;
										  }
									  }
								  } 
							 }
						}
					}
				}
			}
		}
	}
	return 0;
} 

题目2

日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个
以下为4个嫌疑犯的供词
A说:不是我。
B说:是C。
C说:是D。
D说:C在胡说
已知3个人说了真话,1个人说的是假话。
现在请根据这些信息,写一个程序来确定到底谁是凶手

#include <bits/stdc++.h>
using namespace std;
int a, b, c, d;
int main()
{
	for(a=0; a<=1; ++a){	//a是否是凶手 
		for(b=0; b<=1; ++b){	//b是否是凶手
			for(c=0; c<=1; ++c){	//c是否是凶手
				for(d=0; d<=1; ++d){	//d是否是凶手
					//按每个人说的都是真话计算, 加起来等于3, 并且只有一个是凶手 
					if(!a+c+d+!d==3 && a+b+c+d==1){
						if(a){
							cout << "A 是凶手" << endl;
						}
						if(b){
							cout << "B 是凶手" << endl;
						}
						if(c){
							cout << "C 是凶手" << endl;
						}
						if(d){
							cout << "D 是凶手" << endl;
						}
					}
				}
			}
		}
	}
	return 0;
} 

[GESP202312 四级] 田忌赛马

#include <bits/stdc++.h>
using namespace std;
int n, u[50010], v[50010], tagu, tagv, ans; 
int main()
{
	scanf("%d", &n);
	for(int i=1; i<=n; ++i){
		scanf("%d", &u[i]);
	}
	for(int i=1; i<=n; ++i){
		scanf("%d", &v[i]);
	}
	sort(u+1, u+n+1);
	sort(v+1, v+n+1);
	tagu=n;
	tagv=n;
	while(tagu>0 && tagv>0){
		if(u[tagu]>v[tagv]){
			tagu--;
			tagv--;
			ans++;
		}
		else{
			tagv--;
		}
	}
	printf("%d", ans);
	return 0;
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ypeijasd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值