區分旅客國籍.....

 /*問題描述:在一個旅館中住着六個不同國籍的人,他們分別來自美國、德國、英國、法國、俄羅斯和意大利。他們的名字叫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.  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章