简单的pascal题目!谁教教我

来源:百度知道 编辑:UC知道 时间:2024/05/29 18:37:31
15>=K>=0
SN=1+1/2+1/3+1/4+……1/n
让SN大于K

输出最小的N

输入样例:1
输出样例:2
var k,n:longint;
Sn:real;
begin
assign(input,'18_3.in');reset(input);
assign(output,'18_3.out');rewrite(output);
readln(k);
Sn:=1; n:=1;
while(Sn<=k)and(k>=1)and(k<=15)do
begin
n:=n+1;
Sn:=Sn+1/n;
end;
writeln(n);
close(input);close(output);
end.

自己做出来了^O^

楼主 不是我扫兴 你这么做一定超时啊!!!
如果你学信息奥赛的话 一定要考虑时间的 问题
你这么枚举 不可以拿满分的
我不知道这道题按正规方法怎么做 但我有办法拿到满分:
自己在电脑上 用你的方法测出N=1到15时应该输出的值
提交程序时 直接提交常数组 或 提交IF N=1 THEN ;IF N=2 THEN 等等
这样就可以拿满分了
这是交表的方法 很常用 在输入数据情况不多时(比如这道题只有15种)就可以用
如果你学信息奥赛而且想参加NOIP 一定要考虑我说的这些话啊

n:=0;
sn:=0.0;
repeat
inc(n);
sn:=sn+(1/n);
until(sn>k)

program x;
var
k,n:integer;
function Sn(x:integer):real;
var
i:integer;
plus:real;
begin
plus:=0;
for i:=1 to x do
plus:=plus+1/i;
Sn:=plus;
end;
begin
n:=0;
readln(k);
while (Sn(n)<=k)and(k>=1)and(k<=15) do
inc(n);
writeln(n);
readln;
end.