切换到宽版
  • 5265阅读
  • 1回复

翻硬币问题 [复制链接]

上一主题 下一主题
离线晨曦
 
只看楼主 倒序阅读 0 发表于: 2007-08-24
— 本帖被 stevenjl 从 华山论剑 移动到本区(2007-08-24) —
1. 翻硬币
题目描述:
        一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后放回原处。在取3枚,取4枚……直至m枚。然后在从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中每一枚又是正面朝上为止。例如,m为1时,翻两次即可。
输    入:仅有的一个数字是这摞硬币的枚数m ,0< m <1000。
输    出:为了使这摞硬币中的每一枚都是朝正面朝上所必须翻的次数。
输入样例:30
输出样例:899
程    序:
    program Program1;
    var  m:integer;
    function solve(m: integer):integer;
      var i,t,d: integer;
          flag: Boolean;
      begin
        if (m = 1) then
            solve :=      (1)       
        else begin
                d := 2*m+1;    t := 2;    i := 1;    flag := False;
                repeat
                  if (t = 1) then
                    begin
                      solve :=      (2)      ;    flag := True;
                    end
                  else if (      (3)        ) then
                        begin
                          solve := i*m-1;    flag := True;
                        end
                      else
                        t :=      (4)      ;
                  i:=i+1;
                until flag;
              end
      end;
    begin
      read(m); if ((    (5)    ) and (m<1000)) then
        writeln(      (6)      );
    end.
谁能讲一下算法原理
和分析过程
离线lwx
只看该作者 1 发表于: 2007-08-24
每此都是一个整体在翻转,而不是把几个硬币分摊开来翻。
快速回复
限100 字节
 
上一个 下一个