回 帖 发 新 帖 刷新版面

主题:翻硬币

一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后再放回原处。再取3枚,取4枚……直至m枚。然后在从着摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中的每一枚又都是正面朝上为止。例如,m为1时,翻两次即可。m为2时,翻3次即可;…;m为30时,翻899次即可;…

    输入:
       仅有的一个数字是这摞硬币的枚数m,0<m<1000.
    输出:
       为了使这摞硬币中的每一枚有都是正面朝上所必需翻的次数。
    输出样例:
        30
    输出样例:
        899
    程序:
       DECLAREFUNCTION solve(m)
       DIMm,nASINTEGER
       INPUTm
       IFm>0ANDm<1000THEN
         n=①
         PRONTn
       ENDIF
       END

       FUNCTIONsolve(m)
       DIMi,t,dASINTEGER
       IFm=ITHEN
         solve=②
         ELSE
         d=2*m+1
         t=2
         i=1

       DO
         IFt=1THEN
           solve=③
           EXITDO
         ENDIF
         IF④THEN
          solve=i*m-1
          EXIT DO
        ENDIF
        t=⑤
        i=i+1
        LOOP
      ENDIF

      ENDFUNCTION

回复列表 (共2个回复)

沙发

①=solve(m)
②=2
③=1*m
④=t=2*m
⑤=(t*2)mod

板凳

[url=http://www.programfan.com/club/showtxt.asp?id=111749]怎样填空我不知道,但我编过这个程序[/url]
题目描述: 
  一摞硬币共有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 
 

 
 
作者:moz      发表时间:2005-10-11 20:58:00  

 第1楼  

数学的办法我还没想到,
既然没想到,就用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&  
 

我来回复

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