区分旅客国籍.....

 /*问题描述:在一个旅馆中住着六个不同国籍的人,他们分别来自美国、德国、英国、法国、俄罗斯和意大利。他们的名字叫A、B、C、D、E和F。名字的顺序与上面的国籍不一定是相互对应的。现在已知:
1)A美国人是医生。
2)E和俄罗斯人是技师。
3)C和德国人是技师。
4)B和F曾经当过兵,而德国人从未参过军。
5)法国人比A年龄大;意大利人比C年龄大。
6)B同美国人下周要去西安旅行,而C同法国人下周要去杭州度假。
试问由上述已知条件,A、B、C、D、E和F各是哪国人?

*/

  1. #include<iostream>
  2. using namespace std;
  3. int Nation[6];//A--F的国籍,0--5分别代表美国---意大利
  4. int count=0;//记录有多少种情况
  5. int main(){
  6.  void Passenger(int num);
  7.  Passenger(0);
  8.  cout<<count<<endl;
  9.  return 0;
  10. }
  11. void Passenger(int num){
  12.  if(num==6){
  13.   bool temp;
  14.   for(int j=0;j<=5;j++){
  15.    temp=false;
  16.    for(int k=j+1;k<=5;k++){
  17.     if(Nation[j]==Nation[k]){
  18.      temp++;
  19.      break;
  20.     }
  21.    }
  22.    if(temp)break;
  23.   }
  24.   if(temp)return;/*先确保不同国籍*/
  25.   
  26.   else{
  27.    if(Nation[0]!=0 && Nation[4]!=4 && Nation[2]!=1 /*代表已知条件1,2,3*/
  28.     && Nation[1]!=1 && Nation[5]!=1/*条件4*/
  29.     && Nation[0]!=3 && Nation[2]!=5 /*条件5*/
  30.     && Nation[1]!=0 && Nation[2]!=3 /*条件6*/
  31.     && Nation[2]!=0 ){
  32.     count++;
  33.     cout<<"A,B,C,D,E,F可能国籍分别为:"<<endl;
  34.     for(int k=0;k<=5;k++){
  35.      cout<<char('A'+k)<<"是";
  36.      switch(Nation[k]){
  37.      case 0:cout<<"美国人"<<endl;break;
  38.      case 1:cout<<"德国人"<<endl;break;
  39.      case 2:cout<<"英国人"<<endl;break;
  40.      case 3:cout<<"法国人"<<endl;break;
  41.      case 4:cout<<"俄罗斯人"<<endl;break;
  42.      case 5:cout<<"意大利人"<<endl;break;
  43.      default:break;
  44.       
  45.      }
  46.     }
  47.    }
  48.   }
  49.   return;
  50.  }
  51.  else{
  52.   for(int i=0;i<=5;i++){
  53.    Nation[num]=i;
  54.    num++;
  55.    Passenger(num);
  56.    num--;
  57.   }
  58.  }
  59. }
  60.  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值