程式設計解決實際問題--預測比賽結果,確定凶手
阿新 • • 發佈:2019-02-09
2.
5位運動員參加了10米臺跳水比賽,有人讓他們預測比賽結果
A選手說:B第一,我第三。
B選手說:我第二,E第四。
C選手說:我第一,D第二。
D選手說:C最後,我第三。
E選手說:我第四,A第一。
比賽結束後,每位選手都說對了一半,請程式設計確定比賽的名次。
#include <stdio.h> int main() { int a,b,c,d,e; for(a=1;a<=5;a++) for(b=1;b<=5;b++) for(c=1;c<=5;c++) for(d=1;d<=5;d++) for(e=1;e<=5;e++) if((b==1)+(a==3)==1&& (b==2)+(e==4)==1&& (c==1)+(d==2)==1&& (c==5)+(d==3)==1&& (e==4)+(a==1)==1) { int val=0; int flag=1; printf("%d %d %d %d %d\n",a,b,c,d,e); val |=(1<<(a-1)); //移位 val |=(1<<(b-1)); val |=(1<<(c-1)); val |=(1<<(d-1)); val |=(1<<(e-1)); while(val) { if(val%2==0) { flag=0; val/=2; } } if(flag==1) { printf("%d %d %d %d %d\n",a,b,c,d,e); } break; } return 0; }
對於這個程式中,每個人都有可能是1--5的名次,可以借用for迴圈進行控制,在寫程式中會遇到輸出好多的結果的問題,但是這些結果,有些是有明顯錯誤的。如果進行排除,那麼只剩下一種合理的情況。程式中,我們可以借用二進位制的移位來解決這個問題,最終只能得到一種結果。
3.
日本某地發生了一件謀殺案,警察通過排查確定殺人凶手必為4個嫌疑犯的一個。以下為4個嫌疑犯的供詞。
A說:不是我。
B說:是C。
C說:是D。
D說:C在胡說
已知3個人說了真話,1個人說的是假話。
現在請根據這些資訊,寫一個程式來確定到底誰是凶手。
#include<stdio.h> int main() { int peo=0; for(peo='A';peo<='D';peo++) { if((peo!='A')+(peo=='c')+(peo=='D')+(peo!='D')==3) { printf("%c\n",peo); } } return 0; }
本文出自 “無心的執著” 部落格,謝絕轉載!