NOIP初赛练习之三阅读程序写出程序运行结果
NOIPNOIP 初赛练习之三(阅读程序写出程序运行结果)初赛练习之三(阅读程序写出程序运行结果) 前言:前言: 如何做阅读程序题如何做阅读程序题 阅读程序题是得分的关键, 因为不是让你上机去运行程序, 所以要一步步地读程序, 记 录相关变量的值, 最好以画表的形式来记录相关变量值的变化情况。 因为程序的运行结果只 有输出语句才有输出,所以只写出输出语句的结果。 有时要找出规律才能写出结果, 特别是循环次数多的情况, 另外要注意边界值,不能多 算一步也不能少算一步。 这几年的初赛题一般是四道阅读程序题,每道题 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(,output); var i,s,nax:integer; a:array[110] 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 smax 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(,output}; const n=5; var i,j,k:integer; a:array[12*n,12*n] of integer; begin k:=1; for i:=1 to 2*n-1 do if i0 then begin write(i:4);s:=s+1; end; writeln; writeln( s= ,s); writeln( data: );readln(x); writeln(g[x]); end. { 输入: 10 20 65} { data: 10} {输出: } {7.1998 年 高中组第 3 题} program exp3(,output); var i,j:integer; b:array[05] of integer; begin s:=1; for i:=1 to 5 fo b[i]:=i; j:=1; while j0 do begin j:=5; while (j0) and (b[j]=10+j-5) do j:=j-1; if j0 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(, output); const n=4; type se=array[1n*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 sn or tn 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 sswap then begin swap:=s;i1=i;j1:=j end; temp:=a[i];a[i]:=aj]:a[j]:=temp; end; if swap0 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 [120] of 09; begin x:=3465;y:=264;jk:=20; for j1:=1 to 20 do a[j1]:=0; while y0 do begin y1:=y mod 10; y:=y div 10; while y10 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[114] of integer; procedure sw(i1,j1:integer); var k1:integer; begin for k1:=1 to (j1-i1+1) div 2 do begin a[i1+k1-1]:=a[i1+k1-1]+a[j1-k1+1]; a[j1-k1+1]:=a[i1+k1-1]-a[j1-k1+1]; a[i1+k1-1]:=a[i1+k1-1]-a[j1-k1+1]; end; end; begin j:=211; for i:=1 to 14 do begin a[i]:=i;j:=j-i; end; sw(1,4);sw(5,10);sw(11,14);