1. 程式人生 > >Coursera 學習記錄:四大湖排序(使用bool值的小技巧)

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<iostream>;
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;
}