Coursera学習記録:四大湖ソート(bool値を用いた小さなテクニック)


説明
わが国には4大淡水湖がある.A氏は「洞庭湖が最大で、洪沢湖が最小で、鄱陽湖が3番目だ」と話した.Bさんは「洪沢湖が一番大きく、洞庭湖が一番小さく、鄱陽湖が二番目、太湖が三番目だ」と言った.C氏は「洪沢湖は最小で、洞庭湖は3番目だ」と話した.D氏は、「鄱陽湖が最大で、太湖が最小で、洪沢湖が2位、洞庭湖が3位だ」と話した.この4つの湖の大きさが等しくないことが知られています.4人は1人1つしか答えていません.出力は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、文ごとに1つのペアしかないものをつかんで、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;
}