回 帖 发 新 帖 刷新版面

主题:一道很简单的题,我不会做

现在有30个人,从第一个人开始数数(1,2,3,4...),只要数到四或是四的倍数的人,就要死。
最后留下来的人能活,请问:站在哪个位置就能活着?[em18][em18][em18][em18]

回复列表 (共8个回复)

沙发

是不是还少了一个条件?
(是围着圆圈一直数下去还是从头数起?)
(估计应该是围着圆圈来数的)

传统方法应该是要用数组来做这道题的,
但我个人使用字符串比较方便,所以用字符串来做了,
每三个字符代表一个数字(也就是一个人)

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$

板凳

哇哈哈,洪荒落寞雪仰天狂笑
MOZ终于给我抓到你的一个失误了
next
s$=s$+" "
print s$
你这里好像少了个“i”哦
哇哈哈。。。。。
此题关键就是求MOD嘛
MOZ是不是啊,我是这么想的。但用数组实现时,出了个小小的错误!

3 楼

喔?
你是说我的 next 少了一个 i ?
这个参数是允许省略的,默认为对应之前最近的一个 for 的。

之前我的确是有很多地方出错了
现在已经改过来了
但不是你说的那样错
我又不是神仙,当然会出错了
但我也担心小辨子给你们揪着了
所以拼着血如泉涌〔移动GPRS流量收费〕的痛苦
也得用手机上网来俢改。

4 楼

看不懂,请用简单一点的方法

5 楼

那就用数组来用两种方法来做两次吧
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 楼

NEXT 后的可以省略,默认是对它最近的一个相对应??
这个我还不知道。书上没有。谢谢。又长了一个见识!
哦,你是用手机上网的啊。那也真是挺可怜见的。你放心我会跟中国移动它们说的。正因为是有了你们这样的牺牲小我,成就大我的精神,中国的通信事业才会如80岁的老头,活一天赚 一天。我想我跟他们说了以后,以后你的话费如果他们还有点良心的话,就会给你2折优惠的!

7 楼

别去说了,
我去说过一次了,
结果给我打了十五折了.

8 楼

请勿使用“有个问题”、“请帮个忙”、“简单问题”之类模糊的标题,请在标题中明确、具体、直接地点明题意,参见版副def2005-9-2的帖子《在论坛里我根本就不理会的帖子》。

我来回复

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