Coursera 学习记录:四大湖排序(使用bool值的小技巧)

描述

我国有4大淡水湖。
A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三。
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
已知这4个湖的大小均不相等,4个人每人仅答对一个,
请编程按照鄱阳湖、洞庭湖、太湖、洪泽湖的顺序给出他们的大小排名。
输出为4行,第1行为鄱阳湖的大小名次,
从大到小名次分别表示为1、2、3、4;
第2、3、4行分别为洞庭湖、太湖、洪泽湖的大小名次。

int A[4] = { 3, 1, 2, 4 };
int B[4] = { 2, 4, 3, 1 };
int C[4] = { 0, 3, 0, 4 };
int D[4] = { 1, 3, 4, 2 };

解题思路:

1、先列出排序的所有可能,然后与所给信息进行匹配(不合理)

2、抓住每句话只有一个对的,考虑0和1,只存在一个1,那么和一定为1,利用bool值来求解

 

#include;
using namespace std;
int main() {
	for (int a = 1; a <= 4; a++) {
		for (int b = 1; b <= 4; b++) {
			for (int c = 1; c <= 4; c++) {
				for (int d = 1; d <= 4; d++) {
					//可以使用布尔值0,1来表示,每个人只说对了其中一个
					//因为错的为0,对的为1,加和为1
					//关键点就是在于用布尔值
					if ((a != b && a != c && a != d && b != c && b != d && c != d)
						&& ((a == 3) + (b == 1) + (c == 2) + (d == 4) == 1)
						&& ((a == 2) + (b == 4) + (c == 3) + (d == 1) == 1)
						&& ((b == 3) + (d == 4) == 1)
						&& ((a == 1) + (b == 3) + (c == 4) + (d == 2) == 1)) {
						cout << a << endl;
						cout << b << endl;
						cout << c << endl;
						cout << d << endl;
						break;
					}
					
				}
				
			}
			
		}
		

		break;//注意这里的break,根据要求是输出一种可能,或者全部
	}
	return 0;
}

 

你可能感兴趣的:(Thinking,in,Algorithm,Coursera)