回 帖 发 新 帖 刷新版面

主题:yt

题目描述:
  一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后再放回原处。再取3枚,取4枚……直至m枚。然后再从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中的每一枚又都是正面朝上为止。例如,m为1时,翻两次即可。m为2时,翻3次即可;m为3时,翻9次即可;m为4时,翻11次即可;m为5时,翻24次即可;…;m为30时,翻899次即可;…
输 入:
  仅有的一个数字是这摞硬币的枚数m,0<m<1000。
  输 出:
  为了使这摞硬币中的每一枚又都是正面朝上所必需翻的次数。
  输入样例:
      30
  输出样例:
      899

回复列表 (共10个回复)

沙发

数学的办法我还没想到,
既然没想到,就用QB直接来做吧,
我用1000来代入,
用了161秒算出是308000,不知道对不对?

defint a-z
input m
dim s(m)
do
   k&=k&+1
   j=j+1
   if j>m then j=1
   for i=1 to j
     s(i)=1-s(i)
   next
   for i=1 to (j\2)
     swap s(i),s(j-i+1)
   next
   for i=1 to m
     if s(i)>0 then exit for
   next
loop until i>m
print k&

板凳

DIM n AS INTEGER
DIM m AS INTEGER
DIM count AS INTEGER
DIM number AS INTEGER
DIM j AS INTEGER
j = 1
count = 0
INPUT "ying bi shu? ", n
DIM a(n) AS INTEGER
DIM b(n) AS INTEGER
FOR i = 1 TO n
a(i) = 1
NEXT i
FOR i = 1 TO n
b(i) = i
NEXT
DO WHILE (1)
number = 0
m = 0
FOR i = 1 TO (1 + j) \ 2
t = b(i)
b(i) = b(j - i + 1)
b(j - i + 1) = t
NEXT i
FOR i = 1 TO j
  a(b(i)) = a(b(i)) * (-1)
NEXT i
count = count + 1
IF j = n THEN
j = 1
ELSE
j = j + 1
END IF
FOR i = 1 TO n
IF a(i) = 1 THEN number = number + 1
NEXT i
IF number = n THEN EXIT DO
LOOP
PRINT n, count
END


3 楼

才给我10分?
(吐血而亡)

zqnhlm 的方法基本上是和我一致的
看得出来你的脑袋也挺大的,差不多能赶上我了
只是有一个地方不够完善
DIM count AS [color=FF00FF]INTEGER[/color]
应该改成[color=FF00FF]LONG[/color]才能符合题意.
而且你的速度跟我的相比有一定差距喔.

4 楼

哈哈不好意思那是我们老师的

5 楼

你是说楼主是你老师
还是说程序是你老师编的

6 楼

程序是老师编的

7 楼

这样的话
你和你的老师都不能称赞了

8 楼

9 楼

每贴给10分?

还欠我10分.

10 楼

死心眼啊

我来回复

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