1. 程式人生 > >離散數學 SDUT 4184 誰是作案嫌疑人?

離散數學 SDUT 4184 誰是作案嫌疑人?

1.題目

刑偵大隊對涉及六個嫌疑人的一樁疑案進行分析:
一、a ,b至少有一人作案;
二、a,e,f三人中至少有兩人蔘與作案;
三、 a ,d不可能是同案犯;
四、b,c或同時作案,或與本案無關;
五 c,d中有且只有一人作案;
六 如果d沒有參與作案則e也不可能參與作案。
試編寫程式,尋找作案人。
Input

多組測試資料,對於每組測試資料,第 1 行輸入 6 個空格分隔的整數,代表a、b、c 、d 、e 、f的編號,編號x範圍(1 <= x <= 6),且編號互不相同。
Output

對於每組測試資料,第 1 行至第 6 行分別輸出對 a、b、c 、d 、e 、f的判斷,詳細輸出格式請參考樣例。

Sample Input

1 2 3 4 5 6

Sample Output

The suspects numbered 1 are criminals.
The suspects numbered 2 are criminals.
The suspects numbered 3 are criminals.
The suspect numbered 4 is not a criminal.
The suspect numbered 5 is not a criminal.
The suspects numbered 6 are criminals.

2.正確程式碼

#include <stdio.h>
int main() { int a,b,c,d,e,f,i; int arr[7],trr[7]; while(scanf("%d %d %d %d %d %d",&a,&b,&c,&d,&e,&f)!=EOF) { for(i=1;i<=6;i++) arr[i]=0; for(arr[a]=0;arr[a]<=1;arr[a]++) for(arr[b]=0;arr[b]<=1;arr[b]++) for
(arr[c]=0;arr[c]<=1;arr[c]++) for(arr[d]=0;arr[d]<=1;arr[d]++) for(arr[e]=0;arr[e]<=1;arr[e]++) for(arr[f]=0;arr[f]<=1;arr[f]++) { trr[1]=(arr[a]||arr[b]); trr[2]=(arr[a]+arr[e]+arr[f]>=2); trr[3]=(arr[a]+arr[d]<=1); trr[4]=((arr[b]+arr[c]==2)||arr[b]+arr[c]==0); trr[5]=(arr[c]+arr[d]==1); if(arr[d]==0) { if(arr[e]==0) trr[6]=1; else trr[6]=0; } if(trr[1]+trr[2]+trr[3]+trr[4]+trr[5]+trr[6]==6) { if(arr[a]) printf("The suspects numbered %d are criminals.\n",a); else printf("The suspect numbered %d is not a criminal.\n",a); if(arr[b]) printf("The suspects numbered %d are criminals.\n",b); else printf("The suspect numbered %d is not a criminal.",b); if(arr[c]) printf("The suspects numbered %d are criminals.\n",c); else printf("The suspect numbered %d is not a criminal.\n",c); if(arr[d]) printf("The suspects numbered %d are criminals.\n",d); else printf("The suspect numbered %d is not a criminal.\n",d); if(arr[e]) printf("The suspects numbered %d are criminals.\n",e); else printf("The suspect numbered %d is not a criminal.\n",e); if(arr[f]) printf("The suspects numbered %d are criminals.\n",f); else printf("The suspect numbered %d is not a criminal.\n",f); } } } }

3.題目解析

如果你能明確上次賽車那道題,那麼這題你應該很容易想到了,程式碼一次就過,沒什麼難度,這裡直接用相關個數,不用什麼邏輯或和非之類的,更容易寫出來並且想到,雖然可能偷懶了吧,但在程式碼書寫速度上,確實能省下不少時間。