编程题

翻硬币

题目描述: 

  一摞硬币共有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 

  程 序: 

    program Programl;

    var m:integer;

     function solve (m:integer):integer;

     vat i,t,d:integer;

       flag:boolean;

     begin

      if (m=1)then

       so1ve:= ① 

      else begin

         d:=2*m+1;

         t:= 2;

         i:= 1;

         flag:=False;

         repeat

          if (t=1)then

           begin

            solve:= ② 

            flag:=True;

           end

          else if ( ③ )then

              begin

               solve:=i*m-1;

               flag:=True;

              end

             else

              t:= ④ ;

          i:=i+1;

         until flag;

        end

      end;

    begin

     read (m);

     if ((m>0) and (m<1000)) then

      writeln ( ⑤ );

    end.

查看答案
赣ICP备20007335号-2