主题:一道很简单的题,我不会做
pkqs90
[专家分:100] 发布于 2005-09-22 17:47:00
现在有30个人,从第一个人开始数数(1,2,3,4...),只要数到四或是四的倍数的人,就要死。
最后留下来的人能活,请问:站在哪个位置就能活着?[em18][em18][em18][em18]
回复列表 (共8个回复)
沙发
moz [专家分:37620] 发布于 2005-09-22 18:38:00
是不是还少了一个条件?
(是围着圆圈一直数下去还是从头数起?)
(估计应该是围着圆圈来数的)
传统方法应该是要用数组来做这道题的,
但我个人使用字符串比较方便,所以用字符串来做了,
每三个字符代表一个数字(也就是一个人)
s$=space$(30*3+1)
for i=1 to 90 step 3
j=j+1
mid$(s$,i,3)=str$(j)
next
print s$
i=4
do until len(s$)<6
do while i> len(s$)\3
i=i-len(s$)\3
loop
s$=left$(s$,i*3-3)+mid$(s$,i*3+1)
i=i+3
loop
print "死剩种是:";s$
板凳
洪荒落寞雪 [专家分:1500] 发布于 2005-09-22 18:56:00
哇哈哈,洪荒落寞雪仰天狂笑
MOZ终于给我抓到你的一个失误了
next
s$=s$+" "
print s$
你这里好像少了个“i”哦
哇哈哈。。。。。
此题关键就是求MOD嘛
MOZ是不是啊,我是这么想的。但用数组实现时,出了个小小的错误!
3 楼
moz [专家分:37620] 发布于 2005-09-22 20:15:00
喔?
你是说我的 next 少了一个 i ?
这个参数是允许省略的,默认为对应之前最近的一个 for 的。
之前我的确是有很多地方出错了
现在已经改过来了
但不是你说的那样错
我又不是神仙,当然会出错了
但我也担心小辨子给你们揪着了
所以拼着血如泉涌〔移动GPRS流量收费〕的痛苦
也得用手机上网来俢改。
4 楼
pkqs90 [专家分:100] 发布于 2005-09-22 20:29:00
看不懂,请用简单一点的方法
5 楼
moz [专家分:37620] 发布于 2005-09-22 23:34:00
那就用数组来用两种方法来做两次吧
1----------------------------------
dim s(30)
for i=1 to 30
s(i)=i
next
do
a=a+1
if a>30 then a=1
if s(a)>0 then
b=b+1
if b mod 4=0 then
s(a)=0
c=c+1
end if
end if
loop until c=29
print "死剩下:";
for i=1 to 30
if s(i)>0 then print s(i)
next
2--------------------------
k=30
dim s(k)
for i=1 to k
s(i)=i
next
a=1
do
a=a+3
do while a>k
a=a-k
loop
k=k-1
for i=a to k
s(i)=s(i+1)
next
loop until k=1
print "死剩下:";s(1)
6 楼
洪荒落寞雪 [专家分:1500] 发布于 2005-09-23 20:04:00
NEXT 后的可以省略,默认是对它最近的一个相对应??
这个我还不知道。书上没有。谢谢。又长了一个见识!
哦,你是用手机上网的啊。那也真是挺可怜见的。你放心我会跟中国移动它们说的。正因为是有了你们这样的牺牲小我,成就大我的精神,中国的通信事业才会如80岁的老头,活一天赚 一天。我想我跟他们说了以后,以后你的话费如果他们还有点良心的话,就会给你2折优惠的!
7 楼
moz [专家分:37620] 发布于 2005-09-23 21:39:00
别去说了,
我去说过一次了,
结果给我打了十五折了.
8 楼
spray [专家分:180] 发布于 2005-09-27 06:46:00
请勿使用“有个问题”、“请帮个忙”、“简单问题”之类模糊的标题,请在标题中明确、具体、直接地点明题意,参见版副def2005-9-2的帖子《在论坛里我根本就不理会的帖子》。
我来回复