回 帖 发 新 帖 刷新版面

主题:[原创]分享:八国圆桌问题 - 个人思路分享

题: 来自 神倪在世 发的贴 [url=http://bbs.pfan.cn/post-288004.html]PLEASE HALP “八国圆桌问题”[/url]

在一次宴会上,有来自八个不同国家的宾客被安排在同一张圆桌就坐。A是中国人,会讲英语;B是意大利人,能讲西班牙语;C是英国人,会讲法语;D是日本人,能讲汉语;E是法国人,会讲德语;F是俄国人,懂意大利语;G是西班牙人,能讲日语;H是德国人,懂俄语。编程序安排他们的座位,使他们在各自的座位上能方便地跟两旁的客人交谈。

虽然是回人家的贴。不过,下面的内容是我原创的,所以就发个贴大家分享。

小弟的思路如下:

A 是中国人,会讲英语;
B 是意大利人,能讲西班牙语;
C 是英国人,会讲法语;
D 是日本人,能讲汉语;
E 是法国人,会讲德语;
F 是俄国人,懂意大利语;
G 是西班牙人,能讲日语;
H 是德国人,懂俄语。

小弟把不同的国家用不同的数字表示:例中国,汉语都用 1 表示:

A:1,3;
B:2,7;
C:3,5;
D:4,1;
E:5,8;
F:6,2;
G:7,4;
H:8,6。

把上面的结果用数组存起来:

dim Guest(1 to 8, 1 to 2)
Guest(1,1)=1: Guest(1,2)=3
   ...

因为上面的结果中,纵向的数是按次序的。
所以,直接把数组按下面的来存:

dim Guest( 1 to 8 )
Guest(1) = 3
Guest(2) = 7
Guest(3) = 5
Guest(4) = 1
Guest(5) = 8
Guest(6) = 2
Guest(7) = 4
Guest(8) = 6

要不就:

dim Guest( 1 to 8 )
for i = 1 to 8
    Read Guest(i)
next i
DATA 3, 7, 5, 1, 8, 2, 4, 6

接下来,就按人所会的语言来先边上坐什么人了。
这道题设计得很巧妙,所有来宾的国籍与会的语言都可以形成一个圈。
所以,只要人的顺序决定下来,从哪里开始坐,方向如何都没有关系了。

dim id, cnt
id = 1 '第一个人随便坐。
while cnt < 8

    print chr$(64 + id);
    id = Guest(id)
    cnt = cnt + 1

wend

好了,所以的代码为:

dim Guest( 1 to 8 )
for i = 1 to 8
    Read Guest(i)
next i
DATA 3, 7, 5, 1, 8, 2, 4, 6

dim id, cnt
id = 1 '第一个人随便坐。
while cnt < 8

    print chr$(64 + id);
    id = Guest(id)
    cnt = cnt + 1

wend


输出:ACEHFBGD

回复列表 (共4个回复)

沙发

good




































































































































板凳

这是从哪里来的题呀?

3 楼

这个程序非常优化,算法也很好~

4 楼

很好的算法,终于给弄懂了。

我来回复

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