回 帖 发 新 帖 刷新版面

主题:[讨论]高手救命!

背景 Background  
   NOIP初赛的程序完善题单另拿出来对我等菜来说也是不错的编程题目~  
   
   
 描述 Description   
   一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后放回原处。在取3枚,取4枚……直至m枚。然后在从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中每一枚又是正面朝上为止。例如,m为1时,翻两次即可。 
   
   
 输入格式 Input Format  
   仅有的一个数字是这摞硬币的枚数m ,0< m <50000。  
   
   
 输出格式 Output Format  
   一个整数,即为了使这摞硬币中的每一枚都是朝正面朝上所必须翻的次数。
样例输入 Sample Input 
30
样例输出 Sample Outpu
899
 时间限制 Time Limitation  
   各个测试点1s 
我的程序:
var m,i,s,x,j,k:longint;
    a:array[1..1000000] of integer;
begin
read(m);
repeat
begin
for i:=1 to m do
begin
s:=1;
for j:=1 to i do
begin
a[j]:=1-a[j];x:=x+1;
end;
for k:=1 to m do
if a[k]=1 then s:=0;
if s=1 then begin write(x);exit;end;
end;
end;
until s=2;
end.
编译通过...
├ 测试数据 01:运行超时...
├ 测试数据 02:运行超时...
├ 测试数据 03:运行超时...
├ 测试数据 04:答案错误... ├ 标准行输出  8995...
 ├ 错误行输出 2709... 
├ 测试数据 05:答案错误... ├ 标准行输出 3326... 
 ├ 错误行输出 9990... 
-------------------------
Unaccepted 有效得分:0 有效耗时:0ms
请教各位高手帮忙找出错误!!!
 

回复列表 (共4个回复)

沙发

[quote]
a[j]:=1-a[j];x:=x+1;
[/quote]
我不明白x:=x+1是干什么用的,删去可能会得到答案,但更可能“运行严重超时”

板凳

x:=x+1这是用来统计步数的

3 楼


program fanxiangchuli;
  var
    a:array[1..1000]of bollean;
    i,j;
  begin 
    for j:=1to 1000do a[j]:=true;
    for j:=1to 1000do
      begin 
        for i:=1to 1000do
          if i mod j=0 then a[i]:=not a[i];
      end;
    for i:=1to  1000do write(a[i]);
  end.
就是反向处理问题

4 楼

program fanxiangchuli;
  var
    a:array[1..1000]of bollean;
    i,j;
  begin 
    for j:=1to 1000do a[j]:=true;
    for j:=1to 1000do
      begin 
        for i:=1to 1000do
          if i - j=0 then a[i]:=not a[i];
      end;
    for i:=1to  1000do write(a[i]);
  end.

我来回复

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