/*問題描述:在一個旅館中住着六個不同國籍的人,他們分別來自美國、德國、英國、法國、俄羅斯和意大利。他們的名字叫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各是哪國人?
*/
- #include<iostream>
- using namespace std;
- int Nation[6];//A--F的國籍,0--5分別代表美國---意大利
- int count=0;//記錄有多少種情況
- int main(){
- void Passenger(int num);
- Passenger(0);
- cout<<count<<endl;
- return 0;
- }
- void Passenger(int num){
- if(num==6){
- bool temp;
- for(int j=0;j<=5;j++){
- temp=false;
- for(int k=j+1;k<=5;k++){
- if(Nation[j]==Nation[k]){
- temp++;
- break;
- }
- }
- if(temp)break;
- }
- if(temp)return;/*先確保不同國籍*/
- else{
- if(Nation[0]!=0 && Nation[4]!=4 && Nation[2]!=1 /*代表已知條件1,2,3*/
- && Nation[1]!=1 && Nation[5]!=1/*條件4*/
- && Nation[0]!=3 && Nation[2]!=5 /*條件5*/
- && Nation[1]!=0 && Nation[2]!=3 /*條件6*/
- && Nation[2]!=0 ){
- count++;
- cout<<"A,B,C,D,E,F可能國籍分別爲:"<<endl;
- for(int k=0;k<=5;k++){
- cout<<char('A'+k)<<"是";
- switch(Nation[k]){
- case 0:cout<<"美國人"<<endl;break;
- case 1:cout<<"德國人"<<endl;break;
- case 2:cout<<"英國人"<<endl;break;
- case 3:cout<<"法國人"<<endl;break;
- case 4:cout<<"俄羅斯人"<<endl;break;
- case 5:cout<<"意大利人"<<endl;break;
- default:break;
- }
- }
- }
- }
- return;
- }
- else{
- for(int i=0;i<=5;i++){
- Nation[num]=i;
- num++;
- Passenger(num);
- num--;
- }
- }
- }