(1)noip2007 (2)noip2006 (3)noip2005 (4)noip2004 (5)noip2003 (6)noip2002 (7)noip2001 (8)noip2000 (9)noip1999
Noip2007
阅读程序写结果(共4 题,每题8 分,共计32 分) 1.program s401;
var p,q:array[0..5] of integer;
i,x,y:integer; begin
y:=20;
for i:=0 to 4 do read(p[i]); readln;
q[0]:=(p[0]+p[1])+(p[2]+p[3]+p[4]) div 7; q[1]:=p[0]+p[1] div ((p[2]+p[3]) div p[4]); q[2]:=p[0]*p[1] div p[2]; q[3]:=q[0]*q[1];
q[4]:=q[1]+q[2]+q[3];
x:=(q[0]+q[4]+2)-p[(q[3]+3) mod 4]; if (x>10) then
y:=y+(q[1]*100-q[3]) div (p[p[4] mod 3]*5) else
y:=y+20+(q[2]*100-q[3]) div (p[p[4] mod 3]*5); writeln(x,',',y);
end.
/*注:本例中,给定的输入数据可以避免分母为0 或数组元素下标越界。输入:6 6 5 5 3 输出:129,43
2.program s402; var a,b:integer;
x,y:^integer;
procedure fun(a,b:integer); var k:integer;
begin k:=a; a:=b; b:=k; end; begin
a:=3; b:=6;
x:=@a; y:=@b; fun(x^,y^);
write('No.1:',a,',',b,' '); fun(a,b);
writeln('No.2:',a,',',b); end.
输出: No.1:6,3 No.2:6,3
*/ 3.program S403;
var a1:array[1..50] of integer; var i,j,t,t2,n,n2:integer; begin
n:=50;
for i:=1 to n do a1[i]:=0; n2:=round(sqrt(n)); for i:=2 to n2 do if(a1[i]=0) then begin
t2:=n div i;
for j:=2 to t2 do a1[i*j]:=1; end; t:=0;
for i:=2 to n do if (a1[i]=0) then
begin
write(i:4); inc(t);
if(t mod 10=0) then writeln; end; writeln; end. 输出:
________________________________________
4.program S404; const n=12;
ch2:array[0..12] of char
=('q','A','S','O','R','T','E','X','A','M','P','L','E');
var k:integer;
ch:array[0..12] of char; procedure shift(k,n:integer); var v:char;
j:integer; begin
v:=ch[k]; j:=k+k;
while (j<=n) do
begin
if (j end; end; procedure hpsrt; var k:integer; tmp:char; begin for k:=n div 2 downto 1 do shift(k,n); write('No.1: '); for k:=1 to n do write(ch[k]); writeln; for k:=n downto 1 do begin tmp:=ch[1]; ch[1]:=ch[k]; ch[k]:=tmp; shift(1,k-1); end; end; begin for k:=0 to n do ch[k]:=ch2[k]; hpsrt; write('No.2: '); for k:=1 to n do write(ch[k]); writeln; end. 输出:__________________________________________ ___________________________________________ Noip2006 1. Program ex401; var u,v:array[0..3] of integer; i,x,y:integer; begin x:=10; y:=10; for i:=0 to 3 do read(u[i]); v[0]:=(u[0]+u[1]+u[2]+u[3]) div 7; v[1]:=u[0] div ((u[1]-u[2]) div u[3]); v[2]:=u[0]*u[1] div u[2]*u[3]; v[3]:=v[0]*v[1]; x:=(v[0]+v[1]+2)-u[(v[3]+3) mod 4]; if (x>10) then y:=y+(v[2]*100-v[3]) div (u[u[0] mod 3]*5) else y:=y+20+(v[2]*100-v[3]) div (u[v[0] mod 3]*5); writeln (x,',',y); end. {*注:本例中,给定的输入数据可以避 0或下标越界。 ) 输入:9 3 9 4 输出:-13,57 2.Program ex402; const m:array[0..4] of integer=(2,3,5,7,13); var i,j:integer; t: longint; begin for i:=0 to 4 do begin t:=1; for j:=1 to m[i]-1 do t:=t*2; t:=(t*2-1)*t; write (t,' '); end; writeln; end. 输出:6 28 496 8128 33550336 3. Program ex403; Const NN=7; Type Arr1=array[0..30] of char; var s:arr1; k,p:integer; function fun1(s:arr1; a:char;n:integer):integer; var j:integer; begin j:=n; while (a Function fun2(s:arr1; a:char; n:integer):integer; var j:integer; begin j:=1; while (a>s[j])and(j s[k]:=chr(ord('A')+2*k+1); k:=fun1(s,'M',NN)+fun2(s,'M',NN); writeln(k); end. 输出:11 4. program ex404; var x,x2:longint; procedure digit(n,m:longint); var n2:integer; begin if(m>0) then begin n2:=n mod 10; write(n2:2); if(m>1) then digit(n div 10,m div 10); n2:=n mod 10; write(n2:2); end; end; begin writeln('Input a number:'); readln(x); x2:=1; while(x2 Noip2005 阅读程序(共4题,每题8分,共计32 分) 1. var a, b, c, p, q : integer; r : array[0..2] of integer; begin read(a, b, c); p := a div b div c; q := b - c + a + p; r[0] := a * p div q * q; r[1] := r[0] * (r[0] - 300); if (3 * q - p mod 3 <= r[0]) and (r[2] = r[2]) then r[1] := r[r[0] div p mod 2] else r[1] := q mod p; writeln(r[0] - r[1]); end. 输入:100 7 3 输出:-7452 2. var a : array [1..50] of integer; n, i, sum : integer; procedure work(p, r: integer); var i, j, temp : integer; begin if p < r then begin i := p - 1; for j := p to r - 1 do if a[j] >= a[r] then begin inc(i); temp := a[i]; a[i] := a[j]; a[j] := temp; end; temp := a[i + 1]; a[i + 1] := a[r]; a[r] := temp; work(p, i); work(i + 2, r); end; end; begin read(n); for i := 1 to n do read(a[i]); work(1, n); for i := 1 to n - 1 do sum := sum + abs(a[i + 1] - a[i]); writeln(sum); end. 输入:10 23 435 12 345 3123 43 456 12 32 -100 输出:3223 3. var str : string; len, i, j : integer; nchr : array [0..25] of integer; mmin : char; begin mmin := 'z'; readln(str); len := length(str); i := len; while i >= 2 do begin if str[i - 1] < str[i] then break; dec(i); end; if i = 1 then begin writeln('No result!'); exit; end; for j := 1 to i - 2 do write(str[j]); fillchar(nchr, sizeof(nchr), 0); for j := i to len do begin if (str[j] > str[i - 1]) and (str[j] < mmin) then mmin := str[j]; inc(nchr[ord(str[j]) - ord('a')]); end; dec(nchr[ord(mmin) - ord('a')]); inc(nchr[ord(str[i - 1]) - ord('a')]); write(mmin); for i := 0 to 25 do for j := 1 to nchr[i] do write(chr(i + ord('a'))); writeln; end. 输入:zzyzcccbbbaaa 输出:zzzaaabbbcccy 4. var n : longint; function g(k : longint) : longint; begin if k <= 1 then g := k else g := (2002 * g(k - 1) + 2003 * g(k - 2)) mod 2005; end; begin read(n); writeln(g(n)); end. 输入:2005 输出: Noip2004 阅读程序(共4题,每题8分,共计32分) 1.program progam1; var u: array [0..3] of integer; a, b, c, x, y, z: integer; begin read(u[0], u[1], u[2], u[3]); a := u[0] + u[1] + u[2] + u[3] - 5; b := u[0] * (u[1] - u[2] div u[3] + 8); c := u[0] * u[1] div u[2] * u[3]; x := (a + b + 2) * 3 - u[(c + 3) mod 4]; y := (c * 100 - 13) div a div (u[b mod 3] * 5); if((x+y) mod 2 = 0) then z := (a + b + c + x + y) div 2; z := (a + b + c – x - y) * 2; writeln(x + y - z); end. 输入:2 5 7 4 输出: 2.program program2; var i, number, ndata, sum: integer; data: array[1..100] of integer; procedure solve(s, sign, n: integer); var i: integer; begin for i := s to ndata do begin inc(sum, sign * (number div (n * data[i]))); solve(i + 1, -sign, n * data[i]); end; end; begin read(number ,ndata); sum := 0; for i := 1 to ndata do read(data[i]); solve(1, 1, 1); writeln(sum); end. 输入:1000 3 5 13 11 输出: 。 3.program program3; var c: array[1..3] of string[200]; s: array[1..10] of integer; m, n, i: integer; procedure numara; var cod: boolean; i, j, nr: integer; begin for j := 1 to n do begin nr := 0; cod := true; for i := 1 to m do if c[i, j] = '1' then begin if not cod then begin cod := true; inc(s[nr]); nr := 0; end end else begin if cod then begin nr := 1; cod := false; end else inc(nr); end; if not cod then inc(s[nr]); end; end; begin readln(m, n); for i := 1 to m do readln(c[i]); numara; for i := 1 to m do if s[i] <> 0 then write(i, ' ', s[i], ' '); end. 输入: 3 10 1110000111 1100001111 1000000011 输出: 。 4.program program4; const u: array[0..2] of integer = (1, -3, 2); v: array[0..1] of integer = (-2, 3); var i, n, sum: integer; function g(n: integer): integer; var i, sum: integer; begin sum := 0; for i := 1 to n do inc(sum, u[i mod 3] * i); g := sum; end; begin sum := 0; read(n); for i := 1 to n do inc(sum, v[i mod 2] * g(i)); writeln(sum); end. 输入:103 输出: 。 Noip2003 阅读程序(共4题,每题8分,共计32分) 1. program Program1; var a,b,c,d,sum : longint; begin read(a,b,c,d); a := a mod 23; b := b mod 28; c := c mod 33; sum := a * 5544 + b * 14421 + c * 1288 - d; sum := sum + 21252; sum := sum mod 21252; if (sum = 0 ) then sum := 21252; writeln(sum); end. 输入:283 102 23 320 输出____________ 2. program Program2; const u : array[1..4] of integer = (0,5,3,1); v : array[1..4] of integer = (0,7,6,5); var a,b,c,d,e,f,x,y,z: integer; begin read(a,b,c,d,e,f); z := f+ e + d + (c+3) div 4; y := 5 * d + u[c mod 4]; if (b > y) then begin z := z + (b - y + 8) div 9; x := ((b - y + 8) div 9 * 9 -(b - y)) * 4 + 11 * e + v[c mod 4]; end else x := (y - b) * 4 + 11 * e + v[c mod 4]; if (a > x) then z := z + (a - x + 35) div 36; writeln(z) end. 输入: 4 7 9 20 56 47 输出____________________ 3. program Program3; var m,n: integer; mark: Boolean; function test(m,N:integer):integer; var i,p: integer; flag: boolean; begin m := m - 1; i := 0; flag := False; for p:= 2*N downto (N+1) do begin i:= (i+m) mod p; if (i begin test := 0; flag := Ture; Break; end end; if not(flag) then test:=1; end; begin read(n); m:=1; Mark := False; repeat if (test(m,n)=1) then begin writeln(m); break; end; m:= m+1; until Mrak; end. 输入:7 输出_________ 4. program Program4; var m,n,i,j: integer; p,w,a,b: array[0..19] of integer; begin read(n); m:= 0; for i:= 0 to n-1 do begin read(p[i]); b[i]:=1; end; for i:=0 to n-1 do begin if (i>0) then a[m]:=p[i]-p[i-1] else a[m]:=p[i]; m:=m+1; while ((m>1) and (a[m-1]=0)) do begin m:=m-1; b[m]:=1; end; if (m>0) then w[i]:=b[m-1] else w[i]:=b[0]; a[m-1]:=a[m-1]-1; for j:=0 to m-1 do b[j]:=b[j]+1; while ((m>1) and (a[m-1]=0)) do begin m:=m-1; b[m]:=1; end; end; for i:= 0 to n-1 do begin write(w[i]); write(' '); end; writeln(' '); end. 输入:9 4 6 6 6 6 8 9 9 9 9 输出:____________________ Noip2002 阅读程序,写出正确的程序运行结果:(8 + 9 + 9 = 26分) 1. program Gxp1; var i , n , jr , jw , jb : integer ; ch1 : char ; ch : array[1..20] of char ; begin readln(n); for i:=1 to n do read(ch[i]); jr:=1; jw:=n; jb:=n; while (jr<=jw) do begin if (ch[jw]=’R’) then begin ch1:=ch[jr]; ch[jr]:=ch[jw]; ch[jw]:=ch1; jr:=jr+1; end else if ch[jw]=’W’ then jw:=jw-1; else begin ch1:=ch[jw]; ch[jw]:=ch[jb]; ch[jb]:=ch1; jw:=jw-1; jb:=jb-1; end end; for i:=1 to n do write(ch[i]); writeln; end. 输入:10 RBRBWWRBBR 输出: 2. program Gxp2; var i , j , s ,sp1 : integer ; p : boolean ; a : array[1..10] of integer ; begin sp1:=1; a[1]:=2; j:=2; while sp1<10 do begin j:=j+1; p:=true; for i:=2 to j-1 do if (j mod i=0) then p:=false; if p then begin sp1:=sp1+1; a[sp1]:=j; end; end; j:=2; p:=true; while p do begin s:=1; for i:=1 to j do s:=s*a[i]; s:=s+1; for i:=2 to s-1 do if s mod i=0 then p:=false; j:=j+1; end; writeln(s); writeln; end. 输出: 3. Program Gxp2 Var d1 , d2 , X , Min : real ; begin Min:=10000; X:=3; while X<15 do begin d1:=sqrt(9+(X-3)*(X-3)); d2:=sqrt(36+(15-X)*(15-X)); if(d1+d2) Noip2001 阅读程序,写出程序正确的运行结果(4+7+8+9=28分) 1.PROGRAM GAO7_1: FUNCTION ACK(M,N:INTEGER):INTEGER; BEGIN IF M=0 THEN ACK:=N+1 ELSE IF N=0 THEN ACK:=ACK(M-1,1) ELSE ACK:=ACK(M-1,ACK(M,N-1)) END; BEGIN WRITELN(ACK(3,4)); READLN; END. 输出 2.PROGRAM GAO7_2; VAR P,Q,S,T:INTEGER; BEGIN READLN(P); FOR Q:=P+1 TO 2*P DO BEGIN T:=0;S:=(P*Q)MOD(Q-P); IF S=0 THEN BEGIN T:=P+Q+(P*Q)DIV(Q-P);WRITE(T:4);END; END; END. 输入12 输出 3.PROGRAM GAO7_3; VAR I,J,H,M,N,K:INTEGER; B :ARRAY[1..10]OF INTEGER; BEGIN READLN(N); FOR I:=1 TO 10 DO BEGIN M:=N;J:=11; WHILE M>0 DO BEGIN J:=J-1;B[J]:=M MOD 10;M:=M DIV 10 END; FOR H:=J TO 10 DO N:=N+B[H]; END; WRITELN(N); END. 输入1234 输出: 4.PROGRAM GAO7_4; VAR X,Y1,Y2,Y3:INTEGER; BEGIN READLN(X);Y1:=0;Y2:=1;Y3:=1; WHILE Y2<=X DO BEGIN Y1:=Y1+1;Y3:=Y3+2;Y2:=Y2+Y3 END; WRITELN(Y1); END. 输入:23420 输出: Noip2000 阅读程序,并写出正确的运行结果(每题10分,共20分) PROGRAM NOI_003; CONST N=7; M=6; VAR I,J,X0,Y0,X1,Y1,X2,Y2:INTEGER; D:REAL; P:BOOLEAN; G:ARRAY[0..N,0..M] OF 0..1; FUNCTION DISP(X1,Y1,X2,Y2:INTEGER):REAL; BEGIN DISP:=SQRT((X1-X2)*(X1-X2)+(Y1-Y2)*(Y1-Y2)); END; BEGIN FOR I:=0 TO N DO FOR J:=0 TO M DO G[I,J]:=0; READLN(X1,Y1,X2,Y2); G[X1,Y1]:=1; G[X2,Y2]:=1; P:=TRUE; WHILE P DO BEGIN P:=FALSE; D:=DISP(X1,Y1,X2,Y2); X0:=X1; Y0:=Y1; FOR I:=4 TO N DO FOR J:=0 TO M DO IF (D>DISP(I,J,X2,Y2)) AND (G[I,J]=0) THEN BEGIN D:=DISP(I,J,X2,Y2); X0:=I; Y0:=J; END; IF (X0<>X1) OR (Y0<>Y1) THEN BEGIN X1:=X0; Y1:=Y0; P:=TRUE;G[X1,Y1]:=1; END; D:=DISP(X1,Y1,X2,Y2); X0:=X2; Y0:=Y2; FOR I:=0 TO 3 DO FOR J:=0 TO M DO IF (D BEGIN X2:=X0; Y2:=Y0; P:=TRUE; G[X2,Y2]:=1; END; END; WRITELN(X1,Y1,X2,Y2) END. 输入: 7 6 0 0 输出: 2. PROGRAM NOI_002; VAR I,J,L,N,K,S,T:INTEGER; B:ARRAY[1..10] OF 0..9; BEGIN READLN(L,N); S:=L; K:=1; T:=L; IF N>L THEN BEGIN WHILE S FOR I:=1 TO 10 DO B[I]:=0; J:=11; WHILE N>0 DO BEGIN J:=J-1;B[J]:=N MOD L;N:=N DIV L END; FOR I:=10-K+1 TO 10 DO WRITE(CHR(ORD('A')+B[I])); READLN; END ELSE WRITELN(CHR(ORD('A')+N-1)) END. 输入 : 4 167 输出: Noip1999 阅读程序,并写出正确的程序运行结果(每题1.5分,共30分) 1. program exp1; var i,j,k:integer; a: array[0..100]of integer; Begin for I:0 to 100 do a[i]:=i for k:=5 downto 2 do begin for i:=1 to 100 do if ( i mod k)=0 then a[I]:=0; for i:=1 to 99 do for j:=1 to 100-i do if a[j]>a[j+1]then begin a[j]:=a[j]+a[j+1]; a[j+1:=a[j]-a[j+1]; a[j]:=a[j]-a[j+1]; end; end; j:=1; while (a[j]=0)and (j<100)do j:=j+1; for i:=j to 100 do a[0]=a[0]+a[i]; writeln(a[0]); End. 本题的运行结果是: 2、设数组A[1],A[2],…,A[N],已存入了数据,调用不同的排序程序,则数据比较的次数将会不同,试计算分别调用下列不同的排序过程的比较运算的次数。其中SWAP(I,J)表示A[I]与A[J]进行交换。 (1)PROCEDURE SORT1(N:INTEGER); VAR I,J :INTEGER ; BEGIN FOR I:=1 TO N-1 DO FOR J:=1 TO N DO IF A[J] < A[I] THEN SWAP (I,J) END; 调用该过程的语句为SORT1(N),比较运算的次数为:__________ (2) PROCEDURE SORT2(I,N:INTEGER); VAR J :INTEGER ; BEGIN IF I= N THEN WRITE(A[N]) ELSE FOR J:=I+1 TO N DO BEGIN IF A[J] < A[I] THEN SWAP (I,J) WRITE(A[I]); SORT2(I+1,N) END END. 调用该过程的语句为SORT2(1,N),比较运算的次数为:__________ (3)PROCEDURE SORT3(I,J:INTEGER); VAR M :INTEGER ; BEGIN IF I〈〉J THEN BEGIN M:=(I+J) DIV 2 ; SORT3(I,M);SORT3(M+1,J) ; MERGE ; { 假设合并的元素分别为P、G个,需要比较P+G次 } END; END; 调用该过程的语句为SORT3(1,N),比较运算的次数为:__________ 因篇幅问题不能全部显示,请点此查看更多更全内容0) do dec(j); fun1:=j; end;