回 帖 发 新 帖 刷新版面

主题:四国语言问题

在一次会议上,甲、乙、丙、丁四人在一个会议小组中讨论,交谈时发生了语言障碍,在中、英、法、日4种语言中,每人只会两种。可惜选不出一种大家都会的语言。
于是:
(1)只有一种语言有三个人会;
(2)甲会日语,丁不会日语,但能互相交谈;
(3)乙不会日语,但甲和丙交谈时,要请他当翻译;
(4)乙、丙、丁三人想互相交谈,却找不到三人都会的语言;
(5)没人既能用日语,又能用法语交谈。
问:甲、乙、丙、丁各会什么语言?

不知道这个条件怎么在程序中表示,还有怎么判断,请各位指教。

回复列表 (共5个回复)

沙发

A$,B$,C$,D$代表甲乙丙丁四个人
"中英法日"字符串代表懂什么语言

板凳

那那个条件怎么表示?表示好了怎么判断?

3 楼

四个人作一个数组
值以四位二进制值作标记

右边数起
第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 楼

这些一大堆的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 楼

谢谢爷爷啊!!!!!!!
我去研究研究!

我来回复

您尚未登录,请登录后再回复。点此登录或注册