回 帖 发 新 帖 刷新版面

主题:PLEASE HALP “八国圆桌问题”

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

回复列表 (共22个回复)

沙发

第一步:
    先请楼主说说你是怎么想的?
    目前用的是什么思路?
第二步:
    请楼主提供出自己的代码。
    包括写了一半的代码。
第三步:
    说明一下,楼主在什么地方卡住了。
    困难是什么,困难在哪里?

做到以上三步,小弟我才相信楼主的贴不是“作业贴”
小弟我反对 不劳而获 的“作业贴”
原因是:写代码,调试代码,很繁,很辛苦的。

板凳

先告诉你答案是什么:

ACEHFBG

3 楼

我可不是那种人

4 楼


CLS
FOR a = 1 TO 8: FOR b = 1 TO 8: FOR c = 1 TO 8
FOR d = 1 TO 8: FOR e = 1 TO 8: FOR f = 1 TO 8
FOR g = 1 TO 8: FOR h = 1 TO 8
IF a * b * c * d * e * f * g * h = 40320 THEN
IF ABS(a - d) = 1 AND ABS(a - c) = 1 THEN
IF ABS(b - f) = 1 AND ABS(b - g) = 1 THEN
IF ABS(c - e) = 1 AND ABS(d - g) = 1 THEN
IF ABS(e - h) = 1 AND ABS(f - h) = 1 THEN
PRINT a; b; c; d; e; f; g; h
END IF
END IF
END IF
END IF
END IF
NEXT h, g, f, e, d, c, b, a
END

我就是这样想的,但没有运行结果。请问哪儿错了?

5 楼

数学是我最拿手的,用数学解很简单。

6 楼

关于你代码里什么问题嘛,小弟我看不出来哦。
其实,跟本就看不懂啊。

因为小弟我数学不如你那么拿手哦。
没法办,答案用摸的吧。
所以,小弟我是在想,先把中国人的位置写下了。

理论上是谁先定下来都可以的,但是小弟是中国人,所以就中国人优先了(中国人帮中国人嘛)哈哈。

小弟的思路如下:

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

哈哈,和之前我给出的答案不一样。

代码的输出:ACEHFBGD
我自己算的:ACEHFBG (三楼的)

哈哈,我少算了个 D 哦。

7 楼

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

8 楼

Bye the Way:

 运行的速度很快哦。

9 楼

你能不自己计算而直接用程序计算出来吗?虚心请教。

10 楼

我没有自己计算啊。

在写程序之前,我把不同的国家及语言做了编号。
然后就存进数组里面了。
我一点都没有参于计算哦。

但是,小弟明白一个道理(不一定做得到)
一个问题:
适当的编码,
然后加上合适的数据结构,
最后再用对应的操作。

可以大大提升程序的效率和质量。

我来回复

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