在一个旅馆里住着6个不同国籍的人,他们分别来自美国,
德国,英国,法国,俄罗斯和意大利,他们的名字分别是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<stdio.h>
void Print(int choice)
{switch( choice)
{
case 1:
printf(" USA ");
break;
case 2:
printf(" Ger ") ;
break;
case 3:
printf(" ENG ");
break;
case 4:
printf(" France ");
break;
case 5:
printf(" CCCP ") ;
break;
case 6:
printf(" Italy ");
break;
default:
break;
}
}
#include<stdio.h>
main()
{int a,b,c,d,e,f;
printf(" a b c d e f\n");
for(a=1;a<=6;a++)
for(b=1;b<=6;b++)
for(c=1;c<=6;c++)
for(d=1;d<=6;d++)
for(e=1;e<=6;e++)
for(f=1;f<=6;f++)
{if(a!=1&&e!=5&&c!=2&&f!=1&&a!=4&&c!=6&&b!=1&&c!=4)
if(a!=b&&a!=c&&a!=d&&a!=e&&a!=f&&b!=c&&b!=d&&b!=e&&b!=f&&c!=d&&c!=d&&c!=e&&c!=f
&&d!=e&&d!=f&&e!=f)
{Print(a);
Print(b);
Print(c);
Print(d);
Print(e);
Print(f);
printf("\n");
}
}
}
不知道对不对?
总感觉结果太多了,请指教
----------------解决方案--------------------------------------------------------
楼上的程序还是有点问题的.
由于偶不知道能从"而德国人从未参军"这句话推出什么,所以搜出了两个答案.
a b c d e f
Italy Germany England USA France Russia
Italy Russia England USA France Germany
b跟f无法确定的说.不过这种题应该会有唯一解的才对.
----------------解决方案--------------------------------------------------------
usa美国,德国,英国,法国,俄罗斯,意大利
A 0 0
B 0
C 0 0 0
D
E 0
F 1
上面就是楼主给出的有效信息。
根据行的和只能为1,列的和只能为1去推.
[此贴子已经被作者于2006-8-25 10:02:13编辑过]
----------------解决方案--------------------------------------------------------
usa美国,德国,英国,法国,俄罗斯,意大利
A 0 0
B 0
C 0 0 0
D
E 0
F 1
上面就是楼主给出的有效信息。
根据行的和只能为1,列的和只能为1去推.
事实上有效信息远大于此,
你认为 A有可能是俄罗斯人吗?
----------------解决方案--------------------------------------------------------
请您仔细看我上面说的再发表意见,4楼只是把楼主的信息整理成表的形式,具体根据行的和只能为1,列的和只能为1去推.
----------------解决方案--------------------------------------------------------
我想说的是只根据你所整理出来的有效信息去推的话,肯定会出现很多组解,
你认为呢?
----------------解决方案--------------------------------------------------------
这个留给你去试
如果就一个解的话,那就一定可以排除一些假设,我相信您做得到
----------------解决方案--------------------------------------------------------
可以看出一共3种职业:
医生 A 美国人
教师 E 俄罗斯人
技师 C 德国人
意大利人不是C,法国人不是A,法国人又不是C,所以,法国人是E,
意大利人是A,
英国人是C,
美国人不是B,所以美国人可能是D或F,又,B和F曾经是医生,如果F还是医生的话,美国人是F,
剩下德国人和俄罗斯人对应B和D,
如果F不是医生的话,美国人是D,
剩下德国人和俄罗斯人对应B和F,
这样思考的话,下面无法再进行下去了,事实上从条件4,我们是否可以得出德国人不是B和F,因为从逻辑上讲,一条信息不太可能重复说同一个人,因此,德国人是D,
美国人不是B,因此美国人是F,
剩下俄罗斯人是B,
所以我觉得答案应该是
A B C D E F
意大利人 俄罗斯人 英国人 德国人 法国人 美国人
----------------解决方案--------------------------------------------------------
我怎么觉得有些条件不能严格互斥?
----------------解决方案--------------------------------------------------------