/*问题描述:张王李三家各有三个小孩。一天,三家的九个孩子在一起比赛短跑,规定不分年龄大小,
跑第一得9分,跑第2得8分,依此类推。比赛结果各家的总分相同,且这些孩子没有同时到达终点的,
也没有一家的两个或三个孩子获得相连的名次。已知获第一名的是李家的孩子,获得第二的是王家的孩子。
问获得最后一名的是谁家的孩子?
*/
- #include<iostream>
- using namespace std;
- int Label[9],Score[3];//标记各名次是谁家孩子(1-Li,2-Wang,3-Zhang) ,三家孩子得得分
- int main(){
- //每家孩子只能得15分
- void Run(int P);
- Score[0]=9;
- Label[0]=1;/*李家孩子第一名*/
- Score[1]=8;
- Label[1]=2;/*王家孩子第一名*/
- Run(3);
- return 0;
- }
- void Run(int P){/*P代表当前为第几名*/
- if(P==10){
- if(Score[0]==15 && Score[1]==15 && Score[2]==15)
- for(int i=0;i<9;i++){
- switch(Label[i]){
- case 1:cout<<"第"<<i+1<<"名为:"<<"李家的孩子"<<endl;break;
- case 2:cout<<"第"<<i+1<<"名为:"<<"王家的孩子"<<endl;break;
- case 3:cout<<"第"<<i+1<<"名为:"<<"张家的孩子"<<endl;break;
- default:break;
- }
- }
- return;
- }
- else{
- for(int i=1;i<=3;i++){
- if(Label[P-2]!=i){//前后必须不同家
- Score[i-1]+=10-P;
- Label[P-1]=i;
- Run(P+1);
- Score[i-1]-=10-P;
- }
- }
- }
- }