主题:四国语言问题
zqnhlm
[专家分:780] 发布于 2005-07-13 10:17:00
在一次会议上,甲、乙、丙、丁四人在一个会议小组中讨论,交谈时发生了语言障碍,在中、英、法、日4种语言中,每人只会两种。可惜选不出一种大家都会的语言。
于是:
(1)只有一种语言有三个人会;
(2)甲会日语,丁不会日语,但能互相交谈;
(3)乙不会日语,但甲和丙交谈时,要请他当翻译;
(4)乙、丙、丁三人想互相交谈,却找不到三人都会的语言;
(5)没人既能用日语,又能用法语交谈。
问:甲、乙、丙、丁各会什么语言?
不知道这个条件怎么在程序中表示,还有怎么判断,请各位指教。
回复列表 (共5个回复)
沙发
moz [专家分:37620] 发布于 2005-07-13 10:25:00
A$,B$,C$,D$代表甲乙丙丁四个人
"中英法日"字符串代表懂什么语言
板凳
zqnhlm [专家分:780] 发布于 2005-07-13 11:25:00
那那个条件怎么表示?表示好了怎么判断?
3 楼
moz [专家分:37620] 发布于 2005-07-13 13:22:00
四个人作一个数组
值以四位二进制值作标记
右边数起
第1位为1表示懂中文
第2位为1表示懂英文
第3位为1表示懂法文
第4位为1表示懂日文
每个人只懂两种语言,既每个值只有两个1
也就是在
0011 =3
0101 =5
0110 =6
1001 =9
1010 =10
1100 =12 没有人同时懂法语/日语,这个就取消掉了
中循环
有相同的语言的 and 一下不为0就对了
没有相同的语言 and 一下不为0了
这样就可以试试了:
dim r(4),v(5)
v(1)=3
v(2)=5
v(3)=6
v(4)=9
v(5)=10
cls
for a=1 to 5
for b=1 to 5
for c=1 to 5
for d= 1 to 5
r(1)=v(a)
r(2)=v(b)
r(3)=v(c)
r(4)=v(d)
if (r(1) and r(2) and r(3) and r(4))=0 then '这叫做没有相同的语言
if ((r(1) and r(2) and r(3))<>0)_ '这个叫做只有一种语言有三个人懂
+ ((r(1) and r(2) and r(4))<>0)_ '这个其实比较麻烦
+ ((r(1) and r(3) and r(4))<>0)_ '应该用循环来做的
+ ((r(2) and r(3) and r(4))<>0)=-1 then '我用_作行连接符了
if r(1) and 8 then '甲会日语
if (r(4) and 8)=0 then '丁不会日语
if r(1) and r(4) then '甲丁能互相交谈
if (r(2) and 8)=0 then '乙不会日语
if ((r(1) and r(2))<>0) and ((r(2) and r(3))<>0)_
and (r(1) and r(3))=0 then '甲丙要通过乙交谈
if (r(2) and r(3) and (4))=0 then '乙丙丁没有共通语言
'合符条件了
for i=1 to 4
print mid$(" 甲乙丙丁",i*2,2);"懂得";
print rtrim$(mid$(" 中文英语法文日语",((r(i) and 1)*4)+1 ,4));
print rtrim$(mid$(" 中文英语法文日语",((r(i) and 2)*4)+1 ,4));
print rtrim$(mid$(" 中文英语法文日语",((r(i) and 4)*3)+1 ,4));
print rtrim$(mid$(" 中文英语法文日语",((r(i) and 8)*2)+1 ,4))
next
print
print "或者"
print
end if '数好配对的if数量
end if
end if
end if
end if
end if
end if
end if
next d,c,b,a
4 楼
moz [专家分:37620] 发布于 2005-07-13 13:39:00
这些一大堆的if其实是可以化简成一个的,但样子很难看的喔:
dim r(4),v(5)
v(1)=3:v(2)=5:v(3)=6:v(4)=9:v(5)=10
cls
for a=1 to 5:for b=1 to 5:for c=1 to 5:for d= 1 to 5
r(1)=v(a):r(2)=v(b):r(3)=v(c):r(4)=v(d)
if (r(1) and r(2) and r(3) and r(4))=0 and ((r(1) and r(2) and r(3))<>0) + ((r(1) and r(2) and r(4))<>0)+ ((r(1) and r(3) and r(4))<>0)+ ((r(2) and r(3) and r(4))<>0)=-1 and (r(1) and 8)<>0 and (r(4) and 8)=0 and (r(1) and r(4))<>0 and (r(2) and 8)=0 and ((r(1) and r(2))<>0) and ((r(2) and r(3))<>0) and (r(1) and r(3))=0 and (r(2) and r(3) and (4))=0 then
for i=1 to 4
print mid$(" 甲乙丙丁",i*2,2);"懂得";
print rtrim$(mid$(" 中文英语法文日语",((r(i) and 1)*4)+1 ,4));
print rtrim$(mid$(" 中文英语法文日语",((r(i) and 2)*4)+1 ,4));
print rtrim$(mid$(" 中文英语法文日语",((r(i) and 4)*3)+1 ,4));
print rtrim$(mid$(" 中文英语法文日语",((r(i) and 8)*2)+1 ,4))
next
print
print "或者"
print
end if
next d,c,b,a
5 楼
zqnhlm [专家分:780] 发布于 2005-07-13 13:40:00
谢谢爷爷啊!!!!!!!
我去研究研究!
我来回复