浙江省西店中学NOIP初赛练习题之三(程序阅读题)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
NOIP初赛练习之三(阅读程序题)
前言:如何做阅读程序题
阅读程序题是得分的关键,因为不是让你上机去运行程序,所以要一步步地读程序,记录相关变量的值,最好以画表的形式来记录相关变量值的变化情况。因为程序的运行结果只有输出语句才有输出,所以只写出输出语句的结果。
有时要找出规律才能写出结果,特别是循环次数多的情况,另外要注意边界值,不能多算一步也不能少算一步。
这几年的初赛题一般是四道阅读程序题,每道题8分总分为32,因此阅读程序题最能拉开分差。
{1.1996年初中组基础题第4题}{写出程序运行后变量X的值}
x1:=3;x2:=8;
for i:=1 to 5 do
begin
x:=(x1+x2)*2; x1:=x2;x2:=x;
end;
writeln('x=',x);
{2.1996年初中组第5题高中组第3题}{写出程序段运行后数组元素a1,a2...,a11的值}
a[1]:=1;a[2]:=1;k:=1;
repeat
a[k+2]:=1;
for i:=k downto 2 do a[i]:=a[i]+a[i-1];
k:=k+1;
until k>=10;
{3.1998年写程序运行结果初中组第1题高中组第1题}
program exp1(input,output);
var i,s,nax:integer;
a:array[1..10] of integer;
begin
for i:=1 to 10 do read(a[i]);
max:=a[1];s:=a[1];
for i:=2 to 10 do
begin
if s<0 then s:=0;
s:=s+a[i];
if s>max then max:=s;
end;
writeln('max=',max);
end.
{初中输入:-2 13 -1 4 7 8 -1 -18 24 6}
{ 输出:max= }
{高中输入:8 9 -1 24 6 5 11 15 -28 9}
{ 输出:max= }
{4.1998年初中组写程序运行结果第2题} program exp2(input,output}; const n=5;
var i,j,k:integer;
a:array[1..2*n,1..2*n] of integer;
begin
k:=1;
for i:=1 to 2*n-1 do
if i<=n then
if odd(i) then
for j:=i downto 1 do
begin a[i-j+1,j]:=k;k:=k+1 end
else
for j:=1 to i do begin a[i-j+1,j]:=k;k:=k+1; end
else
if odd(i) then
for j:=n downto i-n+1 do begin a[i-j+1,j]:=k;k:=k+1 end
else
for j:=i-n+1 to n do begin a[i-j+1,j]:=k;k:=k+1; end;
for i:=1 to n do
begin for j:=1 to n do write(a[i,j]:3); writeln; end;
end.
{5.1998年初中组写程序运行结果第3题高中组第
2题}
program exp3(input,output);
const n=10;
var s,i:integer;
function co(i:integer):integer;
var j1,s1:integer;
begin
s1:=n;
for j1:=(n-1) downto (n-i+1) do s1:=s1*j1 div (n-j1+1);
co:=s1;
end;
begin
s:=n+1;
for i:=2 to n do s:=s+co(i);
writeln('s=',s);
end.
{6.1998年初中组写程序运行结果第4题}
program exp4(input,output);
const n=3;
var i,j,s,x:integer;
p:array[0..n+1] of integer;
g:array[0..100] of integer;
begin
for i:=0 to 100 do g[i]:=0;
p[0]:=0;p[n+1]:=100;
for i:=1 to n do read(p[i]); readln;
for i:=0 to n do
for j:=i+1 to n+1 do
g[abs(p[j]-p[i])]:=g[abs(p[j]-p[i])]+1;
s:=0;
for i:=0 to 100 do
if g[i]>0 then begin write(i:4);s:=s+1; end; writeln;
writeln('s=',s);
writeln('input data:');readln(x);
writeln(g[x]);
end.
{ 输入: 10 20 65}
{ input data: 10}
{输出: }
{7.1998年高中组第3题}
program exp3(input,output);
var i,j:integer;
b:array[0..5] of integer;
begin
s:=1;
for i:=1 to 5 fo b[i]:=i;
j:=1;
while j>0 do
begin
j:=5;
while (j>0) and (b[j]=10+j-5) do j:=j-1;
if j>0 then
begin
s:=s+1;b[j]:=b[j]+1;
for i:=j+1 to 5 do b[i]:=b[j]+i-j
end;
end;
writeln('s=',s);
end.
{8 1998年高中组第4题}
program exp4(input, output);
const n=4;
type se=array[1..n*2] of char;
var i,j,i1,j1,k,s,t,s1,l,swap:integer;
temp:char; a:se;
begin
for i:=1 to n*2 do read(a[i]);readln;
s:=0;t:=0;
for i:=1 to n*2 do
if a[i]='1' then s:=s+1 else if a[i]='0' then t=t+1;
if s<>n or t<>n then writeln('error')
else begin
s1:=0;
for i:=1 to 2*n-1 do if a[i]<>a[i+1] then s1:=s1+1;
writeln('jamp=',s1); swap:=0;
for i:=1 to 2*n-1 do
for j:=i+1 to 2*n do
if a[i]<>a[j] then
begin
temp:=a[i];a[i]:=a[j];a[j]:=temp;
s:=0;
for l:=1 to 2*n-1 do if a[l]<>a[l]+1 then s:=s+1;
if s>swap then begin swap:=s;i1=i;j1:=j end;
temp:=a[i];a[i]:=aj]:a[j]:=temp;
end;
if swap>0 then writeln('maxswap=',swap-s1,'i=',i1,'j1=',j1); end
end.
{输入:10101100}
{9. 1999年初中组第1题}
program exp1;
var x,y,y1,jk,j1,gme:integer;
a:array [1..20] of 0..9;
begin
x:=3465;y:=264;jk:=20;
for j1:=1 to 20 do a[j1]:=0;
while y<>0 do
begin
y1:=y mod 10; y:=y div 10;
while y1<>0 do
begin
g:=x;
for e:=jk downto 1 do
begin
g:=g+a[e]; a[e]:=g mod 10; g:=g div 10; end;
y1:=y1-1;
end;
jk:=jk-1;
end;
j1=1;
while a[j1]=0 do j1:=j1+1;
for jk:=j1 to 20 do write(a[jk]:4);
writeln
end.
{10.1999年初中组第2题}
program excp1;
var i,j:integer;
a:array[1..14] of integer;