谁家孩子跑最快.....

来源:互联网 发布:域名注册 无需实名 编辑:程序博客网 时间:2024/04/28 16:06

/*问题描述:张王李三家各有三个小孩。一天,三家的九个孩子在一起比赛短跑,规定不分年龄大小,
跑第一得9分,跑第2得8分,依此类推。比赛结果各家的总分相同,且这些孩子没有同时到达终点的,
也没有一家的两个或三个孩子获得相连的名次。已知获第一名的是李家的孩子,获得第二的是王家的孩子。
问获得最后一名的是谁家的孩子?

*/ 

  1. #include<iostream>
  2. using namespace 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. }