1. 程式人生 > >誰家孩子跑最快.....

誰家孩子跑最快.....

/*問題描述:張王李三家各有三個小孩。一天,三家的九個孩子在一起比賽短跑,規定不分年齡大小,
跑第一得9分,跑第2得8分,依此類推。比賽結果各家的總分相同,且這些孩子沒有同時到達終點的,
也沒有一家的兩個或三個孩子獲得相連的名次。已知獲第一名的是李家的孩子,獲得第二的是王家的孩子。
問獲得最後一名的是誰家的孩子?

*/ 

  1. #include<iostream>
  2. usingnamespace std;
  3. int Label[9],Score[3];//標記各名次是誰家孩子(1-Li,2-Wang,3-Zhang) ,三家孩子得得分
  4. int main(){
  5. //每家孩子只能得15分
  6. void Run(int P);
  7.  Score[0]=9;
  8.  Label[0]=1;/*李家孩子第一名*/
  9.  Score[1]=8;
  10.  Label[1]=2;/*王家孩子第一名*/
  11.     Run(3);
  12. return 0;
  13. }
  14. void Run(int P){/*P代表當前為第幾名*/
  15. if(P==10){
  16. if(Score[0]==15 && Score[1]==15 && Score[2]==15)
  17. for(int i=0;i<9;i++){
  18. switch(Label[i]){
  19. case 1:cout<<"第"<<i+1<<"名為:"<<"李家的孩子"<<endl;break;
  20. case 2:cout<<
    "第"<<i+1<<"名為:"<<"王家的孩子"<<endl;break;
  21. case 3:cout<<"第"<<i+1<<"名為:"<<"張家的孩子"<<endl;break;
  22. default:break;
  23.      }
  24.     }
  25. return;
  26.  }
  27. else{
  28. for(int i=1;i<=3;i++){
  29. if(Label[P-2]!=i){//前後必須不同家
  30.     Score[i-1]+=10-P;
  31.     Label[P-1]=i;
  32.     Run(P+1);
  33.                 Score[i-1]-=10-P;
  34.    }
  35.   }
  36.  }
  37. }