标题:[求助] 关于一个逻辑的程序题!
只看楼主
zero442
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-5-26
 问题点数:0 回复次数:14 
[求助] 关于一个逻辑的程序题!

在一个旅馆里住着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各是哪国人?
提示:采用数组及循环判断语句。


能帮我解解吗??
关于逻辑的思路跟程序都要详细点啊!
谢谢拉!

搜索更多相关主题的帖子: 德国 俄罗斯 法国 杭州 英国 
2006-08-24 23:16
横眉冷对
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2005-3-3
得分:0 

#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");
}

}

}
不知道对不对?
总感觉结果太多了,请指教


MSN:jyycom@ 爱好:军事,体育,Rock。
2006-08-25 00:40
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
得分:0 

楼上的程序还是有点问题的.
由于偶不知道能从"而德国人从未参军"这句话推出什么,所以搜出了两个答案.
a b c d e f
Italy Germany England USA France Russia
Italy Russia England USA France Germany
b跟f无法确定的说.不过这种题应该会有唯一解的才对.




汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-08-25 01:53
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
usa美国,德国,英国,法国,俄罗斯,意大利
A 0 0
B 0
C 0 0 0
D
E 0
F 1
上面就是楼主给出的有效信息。
根据行的和只能为1,列的和只能为1去推.

[此贴子已经被作者于2006-8-25 10:02:13编辑过]


对不礼貌的女生收钱......
2006-08-25 10:01
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
得分:0 
以下是引用soft_wind在2006-8-25 10:01:09的发言:
usa美国,德国,英国,法国,俄罗斯,意大利
A 0 0
B 0
C 0 0 0
D
E 0
F 1
上面就是楼主给出的有效信息。
根据行的和只能为1,列的和只能为1去推.

事实上有效信息远大于此,
你认为 A有可能是俄罗斯人吗?


汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-08-25 10:28
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 

请您仔细看我上面说的再发表意见,4楼只是把楼主的信息整理成表的形式,具体根据行的和只能为1,列的和只能为1去推.


对不礼貌的女生收钱......
2006-08-25 10:35
cwande
Rank: 2
等 级:新手上路
威 望:3
帖 子:333
专家分:0
注 册:2006-8-18
得分:0 
我想说的是只根据你所整理出来的有效信息去推的话,肯定会出现很多组解,
你认为呢?

汗,都懒得写代码了.......... cheat了一个威望,哈.....
2006-08-25 10:44
soft_wind
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:1430
专家分:0
注 册:2006-4-5
得分:0 
这个留给你去试
如果就一个解的话,那就一定可以排除一些假设,我相信您做得到

对不礼貌的女生收钱......
2006-08-25 10:51
hb4x
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-8-23
得分:0 

可以看出一共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
意大利人 俄罗斯人 英国人 德国人 法国人 美国人

2006-08-25 15:42
横眉冷对
Rank: 1
等 级:新手上路
帖 子:87
专家分:0
注 册:2005-3-3
得分:0 
我怎么觉得有些条件不能严格互斥?

MSN:jyycom@ 爱好:军事,体育,Rock。
2006-08-26 09:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-85973-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.105146 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved