猜比赛名次

猜比赛名次

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

穷举法

判定结果是否重合利用a * b * c * d * e

a b c d e 分别代表A选手 B选手 C选手 D选手 E选手

#include <stdio.h>
#include <stdlib.h>

int main(){
	int a, b, c, d, e;
	for (a = 1; a <= 5; a++){
		for (b = 1; b <= 5; b++){
			for (c = 1; c <= 5; c++){
				for (d = 1; d <= 5; d++){
					for (e = 1; e <= 5; e++){
						if ((b == 2) + (a == 3) == 1
							&& (b == 2) + (e == 4) == 1 && (c == 1) + (d == 2) == 1
							&& (c == 5) + (d == 3) == 1 && (e == 4) + (a == 1) == 1){
							if (a * b * c * d * e != 120){
								continue;
							}
							printf("得到的名次分别是: a=第%d名 b=第%d名 c=第%d名 d=第%d名 e=第%d名\n",a,b,c,d,e);
						}
					}
				}
			}
		}
	}
	system("pause");
	return 0;
}
#include <stdio.h>
#include <stdlib.h>

void GuessRank(){
	int a, b, c, d, e;
	//将每一种情况穷举出来
	for (a = 1; a <= 5; a++){
		for (b = 1; b <= 5; b++){
			for (c = 1; c <= 5; c++){
				for (d = 1; d <= 5; d++){
					for (e = 1; e <= 5; e++){
						//判定条件
						if ((b == 2) + (a == 3) == 1
							&& (b == 2) + (e == 4) == 1 && (c == 1) + (d == 2) == 1
							&& (c == 5) + (d == 3) == 1 && (e == 4) + (a == 1) == 1){
							if (a * b * c * d * e != 120){
								continue;
							}

							printf("得到的名次分别是: a=第%d名 b=第%d名 c=第%d名 d=第%d名 e=第%d名\n", a, b, c, d, e);
						}
					}
				}
			}
		}
	}

}
int main(){
	GuessRank();
	system("pause");
	return 0;
}
#include <stdio.h>
#include <stdlib.h>


int isDiff(int A, int B, int C, int D, int E) {
	int temp = 0;
	temp |= 1 << (A - 1);
	temp |= 1 << (B - 1);
	temp |= 1 << (C - 1);
	temp |= 1 << (D - 1);
	temp |= 1 << (E - 1);
	return temp == 31;
}

int main () {
	int A, B, C, D, E, F;
	for (int A = 1; A <= 5; A++) {
		for (int B = 1; B <= 5; B++) {
			for (int C = 1; C <= 5; C++) {
				for (int D = 1; D <= 5; D++) {
					for (int E = 1; E <= 5; E++) {
						if ((B == 2) + (A == 3) == 1 && (B == 2)+ (E == 4) == 1 &&  (C == 1) + (D == 2) == 1 && 
							(C == 5) + (D == 3) == 1 && (E == 4) + (A == 1) == 1 && isDiff(A,B,C,D,E)) {
							printf("A第%d名\nB第%d名\nC第%d名\nD第%d名\nE第%d名\n", A, B, C, D, E);
						
						}

					}
				}
			}
		}
	}
    system ("pause");
    return 0;
}

运行结果:
在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值