Coursera 學習記錄:四大湖排序(使用bool值的小技巧)
阿新 • • 發佈:2018-12-16
描述
我國有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; }