主题:PLEASE HALP “八国圆桌问题”
神倪在世
[专家分:30] 发布于 2008-10-27 17:41:00
在一次宴会上,有来自八个不同国家的宾客被安排在同一张圆桌就坐。A是中国人,会讲英语;B是意大利人,能讲西班牙语;C是英国人,会讲法语;D是日本人,能讲汉语;E是法国人,会讲德语;F是俄国人,懂意大利语;G是西班牙人,能讲日语;H是德国人,懂俄语。编程序安排他们的座位,使他们在各自的座位上能方便地跟两旁的客人交谈。
[fly]请帮助,急用,谢谢!!![/fly]
最后更新于:2008-10-28 17:17:00
回复列表 (共22个回复)
11 楼
imjohnzj [专家分:1490] 发布于 2008-10-28 22:14:00
代码分两部分:
第一部份:
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
第一部份的作用就是:
把“A是中国人,会讲英语;B是意大利人,能讲西班牙语;C是英国人,会讲法语;D是日本人,能讲汉语;E是法国人,会讲德语;F是俄国人,懂意大利语;G是西班牙人,能讲日语;H是德国人,懂俄语。”存入数组。
第二部份才是算法:
dim id, cnt
id = 1 '第一个人随便坐。
while cnt < 8
print chr$(64 + id);
id = Guest(id)
cnt = cnt + 1
wend
就这么一点。
楼主,
在刚才的讲解中,那么多的字我都在说什么呢?
这么多的字我都在讲,怎么把那个 人啊~国籍啊~语言啊~ 怎么存入电脑啊。
这道题的解题技巧,我认为就是在 数据怎么存储 这里。
个人愚见,不对的话,大家批评。
12 楼
imjohnzj [专家分:1490] 发布于 2008-10-28 22:16:00
还有,楼主。
能说说你的代码
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
是什么思路呢?
小弟我看不明白,尤其是:
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
这里看不明白。
13 楼
moz [专家分:37620] 发布于 2008-10-29 01:15:00
a$="A是中国人,会讲英国语;B是意大利人,会讲西班牙语;C是英国人,会讲法国语;D是日本人,能讲中国语;E是法国人,会讲德国语;F是俄国人,会讲意大利语;G是西班牙人,会讲日本语;H是德国人,会讲俄国语"
x=instr(a$,"是")
y=instr(x,a$,"人")
b$=mid$(a$,x+2,y-x)
for i=1 to 8
print b$;" - ";
x=instr(y,a$,"会讲")
y=instr(x,a$,"语")
b$=mid$(a$,x+4,y-x-4)+"人"
y=instr(a$,b$)
next
14 楼
imjohnzj [专家分:1490] 发布于 2008-10-29 12:10:00
RE: 楼上的 moz 兄:
你贴出的代码测试过没有?
我运行的结果是:
国人, - 人 - 人 - 人 - 人 - 人 - 人 - 人 -
15 楼
imjohnzj [专家分:1490] 发布于 2008-10-29 12:15:00
看明白了,楼上 moz 的代码是正确的。
思路也和小弟我有些相似的哦。
16 楼
imjohnzj [专家分:1490] 发布于 2008-10-29 12:16:00
小弟觉得还是 moz 的代码更好。
17 楼
神倪在世 [专家分:30] 发布于 2008-10-29 19:51:00
尊敬的副版主MOZ,您的A$里的内容,在QB运行后,出现的根本看不懂.能给我提供一个汉字输入系统的网址吗?
18 楼
moz [专家分:37620] 发布于 2008-10-29 22:07:00
[url=http://mozoho.gicp.net/web/ucdos98c.rar]请在晚上下载,三天内有效。UCDOS98[/url]
19 楼
moz [专家分:37620] 发布于 2008-10-29 22:10:00
使用方法:
1.下载 - 打开
2.解压到...D:\UCDOS (当然,也可以是其他盘,但一定要在根目录下,这里以D盘举例)
3.开始 - 运行 - CMD
4.以下是DOS命令
D:
CD\UCDOS
RD16
RDFNT
KNL
按照QB的目录进入QBX
5.退出
Quit
Exit
20 楼
moz [专家分:37620] 发布于 2008-10-29 22:14:00
当然,其实我更建议你们用在EXCEL里的VBA中,
但是中文字符的长度需要作一些改变。
Sub moz2()
a$ = "A是中国人,会讲英国语;B是意大利人,会讲西班牙语;C是英国人,会讲法国语;D是日本人,能讲中国语;E是法国人,会讲德国语;F是俄国人,会讲意大利语;G是西班牙人,会讲日本语;H是德国人,会讲俄国语"
x = InStr(a$, "是")
y = InStr(x, a$, "人")
b$ = Mid$(a$, x + 1, y - x)
For i = 1 To 8
k$ = k$ + b$ + " - "
x = InStr(y, a$, "会讲")
y = InStr(x, a$, "语")
b$ = Mid$(a$, x + 2, y - x - 2) + "人"
y = InStr(a$, b$)
Next
MsgBox k$
End Sub
我来回复