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