回 帖 发 新 帖 刷新版面

主题:各位高手大哥哥,我是新手,有题请教,谁能帮我!!

补充下面程序(希望对每个空格有详细的解说,拜托各位了!!!)
翻硬币
  题目描述:
  一摞硬币共有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.
[em48][em48][em48][em48]

回复列表 (共4个回复)

沙发

哦,NOIP2003普及组初赛题,这些东西的答案到大榕树找一下就行了

板凳

① 2
② i*m
③ t=2*m
④ (t*2)mod d
⑤ solve(m)
——引自大榕树网站

3 楼

具体解题思路我也没弄清,很抱歉没能帮到楼主,不过楼主的求知精神实在令人佩服、佩服

4 楼

① ② ⑤ 很好填,③ ④ 我也不是太清楚,应该有什么规律~~~~~~~

我来回复

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