NOIP读程序的技巧(Pascal)
解题步骤:
1、仔细阅读文字解释,理解题意和提供的解题思路
2、根据问题的求解要求,了解输入、输出内容和问题处理方法
3、先阅读主程序,了解输出变量和输出要求以及主程序中需要调用的过程或函数是哪些。
4、阅读过程或函数,了解其完成的功能
5、填空方法:一般从主程序最后输出要求,反推主程序中的变量填写或表达式、语句等的书写
6、根据主程序参数与子程序参数传递关系,填写子程序的变量,根据子程序需要完成的功能,完成子程序填空
7、填写完毕,再将程序整个阅读、执行一遍,看能否完成问题提出的要求。
普及组的话,数组是不够的
我以为多做就是最好的技巧,给你30道1.请将以下程序段表示的计算公式写出来(假设X的值已给出)
E:=1; A:=1;
FOR N:=1 TO 10 DO
BEGIN
A:=A*X/N;
E:=E+A;
ENDFOR;
写出所表示的公式。
2.阅读下列程序段,写出程序段运行后变量X的值。
100 X1=3
X1:=3;
X2:=8;
FOR I:=1 TO 5 DO
BEGIN 循环结构,应用数据轮换方式,求
X:=(X1+X2)*2; 两个数和的2倍。
X1:=X2; X2:=X;
END;
WRITELN(‘X=’,X);
3.阅读下列程序段,写出程序运行后数组元素A1,A2,…,A11中的值。
A[1]:=1;
A[2]:=1; K:=1;
REPEAT
A[K+2]:=1;
FOR I:=K+1 DOWNTO 2 DO
A[I]:=A[I]+A[I-1];
K:=K+1;
UNTIL K>=10;
4. program exp1 (imput,output);
var i,s,max: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=
5.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.
6.program exp3 (input,output);
const n=10;
var s,i:integer;
function co(i1:integer):integer;
var j1,s1:integer;
begin
s1:=n; for j1:=(n-1) downto (n-i1+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.
7.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
输出:
8.program excpl;
var x,y,y1,jk,j1,g,e:integcr;
a:array [l..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.
9.program excp2
var i,j:integer;
a:array [1..14] 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); sw(1,14);
for i:=1 to 14 do begin if j mod i=1 then write (a[i]:3); j:=j-a[i]; end;
writeln
end.
10.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;
while s<n do begin k:=k+1; t:=t*l; s:=s+t end;
s:=s-t; n:=n-s-1; 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]));
end.
输入:4 167
输出:
11.program noi_004;
var i,j,j1,j2,p,q:integer;
p1:boolean;
b,c:array [1..100] of integer;
begin
readln(q,p); j:=1; p1:=true; b[j]:=q; j1:=0;
while (q>0) and p1 do
begin
j1:=j1+1; c[j1]:=q*10 div p; q:=q*10-c[j1]*p;
if q>0 then begin
j2:=1; while (b[j2]<>q) and (j2<=j) do j2:=j2+1;
if b[j2]=q
then begin
p1:=false; write('0.');
for i:=1 to j2-1 do write(c[i]:1);
write('{');
for i:=j2 to j1 do write(c[i]:1);
writeln('}')
end
else begin j:=j+1; b[j]:=q end
end
end;
if q=0 then begin
write('0.');
for i:=1 to j1 do write(c[i]:1);
writeln
end;
readln
end.
输入 ① 1 8 输出
输入 ② 2 7 输出
12. program chu7_1;
function fun(x:integer):integer;
begin
if (x=0) or (x=1) then fun:=3
else fun:=x-fun(x-2)
end;
begin
writeln(fun(9));
readln;
end.
13.program chu7_2;
var i,j,f:integer;
a:array [1..8] of integer;
begin
for i:=1 to 8 do
begin
f:=i mod 2;
if f=0 then a[i]:=0
else a[i]:=1;
for j:=1 to i do
if f=0 then a[i]:=a[i]+j
else a[i]:=a[i]*j
end;
for i:=1 to 8 do write(a[i]:5);
end.
14.program chu7_3;
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;
readln
end.
输入:12
输出:
15.prgoram chu7_4;
var n,k,i:integer;
a:array [1..40] of integer;
procedure find(x:integer);
var s,i1,j1:integer;
p:boolean;
begin
i1:=0; p:=true;
while p do
begin
i1:=i1+1; s:=0;
for j1:=1 to n do if a[j1]>a[i1]then s:=s+1;
if(s=x-1)then begin writeln(a[i1]); p:=false end;
end
end;
begin
readln(n,k);
for i:=1 to n do read(a[i]);
find(k); find(n-k);
end.
输入:10 4
12 34 5 65 67 87 7 90 120 13
输出:
16.program exp1;
var i,j,k,n,,l0,l1,lk:integer;
a:array [0..20] of integer;
begin
readln(n,k);
for i:=0 to n-1 do a[i]:=i+1;
a[n]:=a[n-1]; l0:=n-1; lk:=n-1;
for i:=1 to n-1 do
begin
l1:=l0-k; if (l1<0) then l1:=l1+n;
if (l1=lk) then begin a[l0]:=a[n]; lk:=lk-1; a[n]:=a[lk]; l0:=lk end;
else begin a[l0]:=a[l1];l0:=l1; end;
end;
a[l0]:=a[n]; for i:=0 to n-1 do write(a[i]:40); writeln;
end.
输入:10 4
输出:
17.program exp2;
var 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+13
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
输出:
18.pmgram exp3;
var i,j,p,n,q,s:integer;
a:array [1..20] of integer;
begin
readln(p,n,q);j :=21;
while (n>0)do begin j:=j-1;a[j]:=n mod 10;n:=n div 10; end;
s:=0; for i:=j t0 20 do s:=s*p+a[i]; writeln(s); j:=21;
while (s>o)do begin j:=j-1; a[j]:=s mod q; s:=s div q; end;
for i:=j to 20 do write(a[i]);readln;
end.
输入:7 3051 8
输出:
19.program programl;
var a,x,y,okl,ok2:integer;
begin
a:=100; x:=l0; y:=20; okl:=5; ok2:=0;
if ((x>y) or ((y<>20) and (okl=0)) and (ok2<>0)) then a:=1
else if ((okl<>0) and (ok2=、0)) then a:=-1 else a:=0;
writeln(a);
end.
20.program Program2;
var a,t:string;
i,j:integer;
begin
a:=morning; j:=l; for i:=2 to 7 do if (a[j]<a[i]) then j:=i;
j:=j-1; for i:=1 to j do write(a[i]);
end.
21.program program3;
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
输出:
22.program program4;
var a:array [0..5] of integer;
sum,n,max,i,j,k:integer;
cover:array [0..22000] of Boolean;
begin
read(a[5],a[4],a[3],a[2],a[1],a[0]);
if ((a[5]=0) and (a[3]=0) and (a[1]=0))
then begin a[5]:=a[4]; a[4]:=a[2]; a[3]:=a[0]; a[2]:=0; a[0]:=0; end;
for i:=0 to 5 do if (a[i]>10) then a[i]:=10+(a[i] mod 2);
sum:=0;
for i:=0 to 5 do sum:=sum+a[i]*(6-i);
if ((sum mod 2)<>0) then begin writeln(‘Can’t be divided.’); exit; end;
sum:=sum div 2; max:=0; cover[0]:=True;
for i:=1 to sum*2 do cover[i]:=False;
for i:=0 to 5 do;
begin
j:=0;
while (j<a[i]) do
begin
for k:=max downto 0 do
begin if (cover[k]) then cover[k+6-i]:=True; end;
max:=max+6-I; j:=j+1;
end;
end;
if (cover[sum]) then writeln(‘Can be divided.’)
else writeln(‘can’t be divided.’);
end.
输入:4 7 9 20 56 48 输入:1000 7 101 20 55 1 输入:2000 5 l 1 0 0
输出: 输出: 输出:
23.program program1;
var
a,b,c,d,e:integer;
begin
a:=79; b:=34; c:=57; d:=0; e:=-1;
if (a<c) or (b>c) then d:=d+e
else if (d+10<e) then d:=e+10
else d:=e-a;
writeln(d);
end.
24.program program2;
var
i,j:integer;
str1,str2:string;
begin
str1:='pig-is-stupid'; str2:='clever';
str1[1]:='d'; str1[2]:='o'; i:=8;
for j:=1 to 6 do begin str1[i]:=str2[j]; inc(i); end;
writeln(str1);
end.
25.program progam3;
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
输出: 。
26.program program4;
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
输出: 。
27.program cup_1;
var n,i,j,k,di,dj:integer;
a:array [1..20,1..20] of integer;
begin
n:=7;i:=1;j:=n;k:=1;di:=1;dj:=1;
while (k<=n*n) do
begin
a[i,j]:=k; k:=k+1;i:=i+di;j:=j+dj;
if (i=n+1)
then begin i:=n;j:=j-2;di:=-1;dj:=-1 end
else if (j=n+1)
then begin j:=n;di:=-1;dj:=-1 end
else if (j=0)
then begin i:=i+2;j:=1;di:=1;dj:=1 end
else if (i=0) begin j:=1;di:=1;dj:=1 end
end;
for j:=1 to n do write(a[n div 2,j]:4);
writeln
end.
28.program cup_2;
var s:string;i,j,m,w:integer;c:char;
a:array [0..127] of integer;
begin
for i:=0 to 127 do
begin
c:=chr(i);
if ((’0’<=c) and (c<=’9’))
then a[i]:=1
else
if (((’A’<=c) and (c<=’Z’)) or ((’a’<=c) and (c<=’z’)))
then a[i]:=2
else a[i]:=0
end;
readln(s); m:=length(s);
for i:=1 to m do
begin
j:=ord(s[i]);
if (a[j]>0) then begin write(s[i]);a[j]:=a[j]-1 end
end;
writeln
end.
输入:123+1234a+12abc-aaABB*ABC
输出:
29.program cup_3;
function f(m,n,k:integer):integer;
begin
if ((m=0) and (n=0) and (k=0))
then f:=1
else if ((0<=m) and (m<=n) and (n<=k))
then f:=f(m-1,n,k)+f(m,n-1,k)+f(m,n,k-1)
else f:=0;
end;
begin
writeln(f(3,3,3));
end.
30.program cup_4;
var s:string;wc,lcs,i:integer
begin
readln(s);wc:=0;lcs:=1;
for i:=1 to length(s) do
if ((lcs=0) and ((s[i]=’’) or (s[i]=chr(9))))
then lcs:=1
else if ((lcs=0) and (s[i]<>’’) and (s[i]<>chr(9)))
then begin wc:=wc+1;lcs:=0 end;
writeln(wc);
end
输入:This is a test program!
输出:
其实没什么技巧可言.
但我总结了几条经验:
一.有些答案可以事先记住规律(如某些数列,或快排),这样一眼就看出来了.
二.只有算,如果数据量不是特别大,否则就先算,然后找一找规律.(这样一定行,但要有耐性,数据量太大的题不可能没规律的,否则只有电脑能算出来)
用不到什么技巧,初赛很好过,如果你平时读的比较多的话,那就应该很容易了,这种技巧很难言传。你可以找个小点的数或者几次循环来试,然后体会出这个程序的编程思想,应该很简单了。问一下,你是普及组的还是提高组?
最后,祝你取得好成绩。
初赛貌似不需要什么技巧,
选择题把基础搞实了可以赚不少分
看程序写结果的题目
你就把自己当成一台机器就好了
国内专业的芯片解密公司介绍
也是目前国内最具专业特色的芯片解密技术服务公司;本公司采用目前国际上最先进的技术与设备,专业的IC解密程序流程竭诚为国内外广大客户提供专业IC解密服务(本公司解密仅限合法性,有关法律上的一切责任纠纷均由对方承担,
公安审问以后,直接把人送到看守所,不用走什么程序吗
公安机关再确定该人有犯罪嫌疑后,可以申请刑事拘留,将该人羁押至看守所。看守所在押人员案件由公安机关负责侦办,待其侦查完毕,呈交检察院审核、公诉,如果想了解案件进度,可以聘请律师介入案件。
...告诉我下为什么我3DMAX2010英文版系统设置视图驱动中没有oip...
在nVidia或者AMD官网上把对应型号的显卡驱动下载下来并且安装,就有了OPENGL驱动了。
安装防火墙之后,有应用程序要访问网络??
如果你对程序行为还不是很清楚的话,一般是 选择 允许 ,还有就是那个 下次不用重新提示之类的 框也打上勾!!没有特别情况的话,一般是选择允许,
psp3000 6.35能用的游戏与主题
(2)使用方法:首先刷写好6.20TN-A\/B,然后解压文件,将文件夹中的PSP\/System\/OIP文件夹复制到你PSP里的PSP\/System下,在Seplugins中vsh.txt文件里另起一行,添加代码ms0:\/PSP\/SYSTEM\/OIP\/isoctrl.prx 1 然后reset TN VSH Menu就能从XMB运行游戏了,游戏放在根目录的ISO文件夹里。(3)下载:Open Idea ISOloader0.2...
广东规模最大的芯片解密企业
ALTERA LG\/HYUNDAI PHILIPS XILINX WINBOND INTEL MOTOROLA LATTICE MACH(PSD) SST ISSI CPLD系列 GAL ATMEL(AVR) SYNCMOS HOLTEK CYPRESS 单片机:OIP系列单片机解密.51系列单片机解密.AVR系列单片机解密.PLD\/CPLD解密……详情登陆:http:\/\/www.ic-jm.com http:\/\/www.circuit-tech.cn(总公司)
仪衫蒲地: var st,st2:string; f:text; begin while true do begin readln(st); while (st = '') do readln(st); assign(f,st); reset(f); while (not eof(f)) do begin readln(f,st2); writeln(st2); end; close(f); end; end.
砚山县13925259300: NOIP做写结果和程序填空的技巧 - ?
仪衫蒲地: 在联赛初赛卷中,填空题的内容通常有1、变量方面的填空定义变量的数据类型;设定变量的初值;对变量的赋值;根据变量的辖域确定其是全局变量还是某个子程序的局部变量.2、循环方面的填空 定义循环变量;设定循环变量的初值和终值...
砚山县13925259300: NOIP(PASCAL)中完善程序的题要怎么做... - ?
仪衫蒲地: 解题步骤: 1、仔细阅读文字解释,理解题意和提供的解题思路 2、根据问题的求解要求,了解输入、输出内容和问题处理方法 3、先阅读主程序,了解输出变量和输出要求以及主程序中需要调用的过程或函数是哪些. 4、阅读过程或函数,了解其完成的功能 5、填空方法:一般从主程序最后输出要求,反推主程序中的变量填写或表达式、语句等的书写 6、根据主程序参数与子程序参数传递关系,填写子程序的变量,根据子程序需要完成的功能,完成子程序填空 7、填写完毕,再将程序整个阅读、执行一遍,看能否完成问题提出的要求.
砚山县13925259300: 编程noip2010数字统计用Pascal怎么做 - ?
仪衫蒲地: varans,n,m,i:longint; function js(x:longint):longint; var x1:0..9; begin js:=0;while x>0 dobeginx1:=x mod 10;if x1=2 then js:=js+1;x:=x div 10;end; end; beginreadln(n,m); ans:=0;for i:=n to m doans:=ans+js(i);writeln(ans); end.-----我就是我,不一样的烟火.
砚山县13925259300: NOIP1999回文数(pascal) - ?
仪衫蒲地: 我优盘没拿回来,这是我学校网站上的例程 program noip99_02; var a:array[1..10000] of integer; ____l,step,i,n:longint; ____m:string; procedure work; __var b:array[1..10000] of integer; ______i:longint; __begin ____fillchar(b,sizeof(b),0); ____for i:...
砚山县13925259300: 高二.要参加noip,学pascal是最佳选择么?求pascal语言的用法,意义?
仪衫蒲地: pascal虽然写起来比c和cpp长,但有助于代码语句的规范化,适合高中生学,习惯养成后写出的代码会很漂亮.其实语言选择不重要,算法才是王道.noip赛四道题中一般有一两个水题,直接暴力可以解决,剩余的必须用一些算法,不然大的数据过不了.noip,额,你要做好心理准备
砚山县13925259300: PASCAL常用的几种读入方法 - ?
仪衫蒲地: 两种方法: 1.先读入字符 var a,b:integer; c:char; begin read(c,a,b); …… 2.分开读写 var a,b:integer; c:char; begin read(a,b); read©;
砚山县13925259300: 求NOIP2011复赛普及组题目详解 PASCAL - ?
仪衫蒲地: 第一题注意负数,注意有可能出现-0(虽然我也不确定有没有);第二题一个单词一个单词地读(用空格隔断),读一个比较一个;第三题模拟,不断排序;(但我估计会超时) 第四题用分治,先寻找括号外的加号,没有的话就寻找括号外的乘号,把找到的那个地方的左右两边分别计算在合在一起.注意去括号,注意最后的递归边界.计算时住随时mod 10007(可以用数学的余数定律证明这样不会改变结果).但着也不能过全,递归到十二万多层就崩溃了.不过至少可以过一半
砚山县13925259300: NOIP提高组,要用到哪些算法 pascal - ?
仪衫蒲地: NOIP提高组的你暂时不用学,但如果你想知道的话就告诉你一下吧: 算法:贪心、DP、搜索(重点学优化和判重)、分治、图论、博弈、二分、二分图匹配、网络流、KMP. 数据结构:并查集、二叉堆、队列、hash、二叉查找树、双向链表...
砚山县13925259300: 请问c/c++和pascal有什么区别啊,我参加noip都能用吗?抱歉我小白,请详解, - ?
仪衫蒲地: 对于参加noip没有太大区别 c++读入慢一点,有时候需要手写字符串读入;pascal堆栈有限制貌似是4M但c++没有;应该没有太大区别了.至于都用……理论上貌似是不可以的,因为报名要报语言的,初赛题目是不一样的.总不会要求写C的人填程序用P对吧.而且没必要同时熟练两个语言吧……还是挑一个吧……推荐c++,脱离比赛之后他有更宽广的前景.