1. 程式人生 > >程式設計解決實際問題--預測比賽結果,確定凶手

程式設計解決實際問題--預測比賽結果,確定凶手

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;
}

本文出自 “無心的執著” 部落格,謝絕轉載!