主题:[讨论]第N个人出局或表演的题目
冰睛
[专家分:30] 发布于 2005-12-06 16:52:00
[size=2][/size][color=800080][/color]
[size=3][/size]
1。请大家帮我分析一下这一类型题目的思路(简单一点的):
M个人围坐在一起,确定其中一个人为1号,按顺时针方向依次为2号,3号。。。
M号随机抽一个正整数N(N<=M),从1号开始按顺时方向数起,每数到N时,这个人就从圈里出来表演节目,再继续数1,2,3,。。。,N数到第N个人也从圈时出来表演。。。。凡是表演过节目的人,下次数的时候就跳过不再数。不断继续下去,直到M个人都从圈内出来表演过节目的人。编军一个程序打印出表演者的顺序号码。
2。这类题目有哪些?如有国王杀人问题,及数到N时出局。。一样的吧,还有什么类型的。。?([em18][em18][em18][em18]
回复列表 (共11个回复)
沙发
wanggcc [专家分:1450] 发布于 2005-12-06 17:00:00
这种题目关键是难想,想出来了程序也就写好了。我很喜欢这样的题目,可以开阔思路
板凳
moz [专家分:37620] 发布于 2005-12-06 21:53:00
1. 数组标志,
找到目标作适当处理。
2. 有一定规律的甚至可以不用数组。
3 楼
冰睛 [专家分:30] 发布于 2005-12-06 23:38:00
呵呵,我知道有人会帮我写的。[em2]
4 楼
飞鸟12 [专家分:2830] 发布于 2005-12-07 08:14:00
'M个人围坐在一起,确定其中一个人为1号,按顺时针方向依次为2号,3号。。。
'M号随机抽一个正整数N(N<=M),从1号开始按顺时方向数起,
'每数到N时,这个人就从圈里出来表演节目,再继续数1,2,3,。。。,N
'数到第N个人也从圈时出来表演。。。。
'凡是表演过节目的人,下次数的时候就跳过不再数。
'不断继续下去,直到M个人都从圈内出来表演过节目的人。
'编写一个程序打印出表演者的顺序号码。
'飞鸟12 2005/12/6 23:25:05
do
input "max ,n:";m,n
loop until m>n
DIM state(1 TO m) AS INTEGER, sort(1 TO m) AS INTEGER
for i=1 to m
state(i)=0 '用来存储每个人的状态 为1则已经表演过
sort(i)=0 '用来存储表演的顺序
next i
i=1 '用于state数组中的计数
cnts=1 '用于sort 数组中的计数
cntn=0 '用于查找计数
do
'查找第N个人
cntn=0
do
if state(i)=0 then
cntn=cntn+1
if cntn=n then exit do
end if
i=i+1:if i=m+1 then i=1
loop
'将次序存入sort
sort(cnts)=i
state(i)=1
cnts=cnts+1
loop while cnts<=m
for i=1 to m
print using "### ";sort(i);
next i
sleep
max ,n:? 23,12
12 1 14 4 18 9 2 19 13 8 6 5 7 11 17 23 20 16 22 21
15 10 3
5 楼
冰睛 [专家分:30] 发布于 2005-12-07 17:12:00
谢谢。
6 楼
冰睛 [专家分:30] 发布于 2005-12-07 17:13:00
dim y(4,-3to3,3to6)的元素个数是。。多少。
是这样子解释的吗。。5*7*4=140个元素?
7 楼
飞鸟12 [专家分:2830] 发布于 2005-12-07 19:36:00
是的
8 楼
moz [专家分:37620] 发布于 2005-12-07 20:16:00
'M个人围坐在一起,确定其中一个人为1号,按顺时针方向依次为2号,3号。。。
'M号随机抽一个正整数N(N<=M),从1号开始按顺时方向数起,
'每数到N时,这个人就从圈里出来表演节目,再继续数1,2,3,。。。,N
'数到第N个人也从圈时出来表演。。。。
'凡是表演过节目的人,下次数的时候就跳过不再数。
'不断继续下去,直到M个人都从圈内出来表演过节目的人。
'编写一个程序打印出表演者的顺序号码。
m = 23 : n = 12 : i=1
for j = 1 to m : s$ = s$ + chr$(j) : next
for j = 1 to m
i = (i + n - 2) mod len(s$) + 1
print asc(mid$(s$, i, 1));
s$ = left$(s$, i - 1) + mid$(s$, i + 1)
next
9 楼
moz [专家分:37620] 发布于 2005-12-07 20:28:00
m=23
n=12
dim state(m)
for cnts=1 to m
cntn=0
do
i=i mod m + 1
cntn=cntn+1-state(i)
loop until cntn=n
state(i)=1
print i;
next
10 楼
moz [专家分:37620] 发布于 2005-12-07 20:32:00
m=23
n=12
dim state(m)
for cnts=1 to m
for cntn=1 to n
i=i mod m + 1
cntn=cntn-state(i)
next
state(i)=1
print i;
next
我来回复