1. 程式人生 > >推理程式設計

推理程式設計

1.

5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果 
A選手說:B第二,我第三; 
B選手說:我第二,E第四; 
C選手說:我第一,D第二; 
D選手說:C最後,我第三; 
E選手說:我第四,A第一; 
比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。 

程式碼:

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

int main(){
	//A選手說:B第二,A第三; 
	//B選手說:B第二,E第四;
	//C選手說:C第一,D第二; 
	//D選手說:C最後,D第三; 
	//E選手說:E第四,A第一; 
	//A 3  B 1   C 5   D 2   E 4 
	//利用for迴圈
	for (int a = 1; a < 6; ++a){
		for (int b = 1; b < 6; ++b){
			for (int c = 1; c < 6; ++c){
				for (int d = 1; d < 6; ++d){
					for (int e = 1; e < 6; ++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) == 1 &&
							//a、b、c、d、e各不相同
							a*b*c*d*e == 120){  
							printf("A:%d\n", a);
							printf("B:%d\n", b);
							printf("C:%d\n", c);
							printf("D:%d\n", d);
							printf("E:%d\n", e);
						}
					}
				}
			}
		}
	}
	system("pause");
	return 0;
}

執行結果:

2.

日本某地發生了一件謀殺案,警察通過排查確定殺人凶手必為4個 
嫌疑犯的一個。以下為4個嫌疑犯的供詞。 
A說:不是我。 
B說:是C。 
C說:是D。 
D說:C在胡說 
已知3個人說了真話,1個人說的是假話。 
現在請根據這些資訊,寫一個程式來確定到底誰是凶手。 

程式碼:

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

//A說:不是A
//B說:是C 
//C說:是D
//D說:不是D
//3真,1假
//C是凶手
//假設凶手為1
int main(){
	for (int a = 0; a < 2; ++a){
		for (int b = 0; b < 2; ++b){
			for (int c = 0; c < 2; ++c){
				for (int d = 0; d < 2; ++d){
					if ((a == 1) + (b == 1) + (c == 1) + (d == 1) == 1  //只有一人為凶手
						&&(a==0)+(c==1)+(d==1)+(d==0)==3){
						if (a == 1){
							printf("凶手為:A\n");
						}
						else if (b == 1){
							printf("凶手為:B\n");
						}
						else if (c == 1){
							printf("凶手為:C\n");
						}
						else if (d == 1){
							printf("凶手為:D\n");
						}
					}
				}
			}
		}
	}
	system("pause");
	return 0;
}

執行結果: