回 帖 发 新 帖 刷新版面

主题:NOIP2002复赛第一题解法

    输入一个K(K<=15),S=1+1/2+1/3+……+1/N,当S>K成立时,输出最小的N值。
这有用FOR循环、WHILE循环、REPEAT-UNTIL循环。
program noipc1;
  var k:byte;{BYTE型的范围-255~255} n:longint;{长整范围10^-17~10^-18} s:real;
begin
  readln(k);{输入K值}
  n:=1;
  for n:=1 to 10000000 do begin
    s:=s+1/n;
    if s>k then begin
      writeln(n); break;{跳出循环}
    end;
  end;
end.

program noipc1;
  var
begin
  readln(k);
  n:=1;
  while s>k do begin
    s:=s+1/n;
    if s<=k then
    n:=n+1;
  end;
  writeln(n);
end.

program noipc1;
  var
begin
  readln(k);
  n:=1;
  repeat
    s:=s+1/n;
    if s<=k then
      n:=n+1;
  until s<=k;
  writeln(n);
end.

回复列表 (共8个回复)

沙发

这个题目真是容易

板凳

  朋友,你的循环的判断条件有问题哦。

3 楼

简单的程序是这个:
program noipc1;
var
  k:1..15;
  s:real;
begin
  readln(k);
s:=0;n:=0;
  repeat
    inc(n);
    s:=s+1/n;
  until s>k;
  writeln(n);
end.

这个也可以加精???刚学1星期pascal的人都回做。而且这是普及组的第一题。

4 楼

这个题当时偶竟然没做对,真丢脸。

[size=6]呜呜~~~~~~~~~~~~~[/size]

不过当时我使用的是QBASIC。

5 楼

我当时也用的QB,我得了12分,没用双精度:(

6 楼

我也忘了由双精度,可是后面几题做得还可以。所以,最后抱了个全国一等奖回家。

7 楼

我也是,我42分

8 楼

你们好厉害

我来回复

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