Noip提高组pascal题目

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Noip提高组pascal题目相关的知识,希望对你有一定的参考价值。

急求

第九届分区联赛提高组初赛试题
(提高组 PASCAL 语言 二小时完成)
●● 全部答案均要写在答案卷子上,写在试卷纸上一律无效 ●●
一.单项选择题 (共10题,每题1.5分,共计15分。每题有且仅有一个正确答案.)。
1. 图灵 (Alan Turing) 是 ( )。
A) 美国人 B) 英国人 C) 德国人 D) 匈牙利人 E) 法国人
2. 第一个给计算机写程序的人是( )。
A) Alan Mathison Turing B) Ada Lovelace C) John von Neumann
D) John Mc-Carthy E) Edsger Wybe Dijkstra
3. 十进制数2003等值于二进制数( )。
A) 0100000111 B) 10000011 C) 110000111 D) 11111010011 E) 1111010011
4. 假设A=true,B=false,C=ture,D=ture,逻辑运算表达式A∧B∨C∧D的值是( )。
A) ture B) false C) 0 D) 1 E) NULL
5. 一个高度为h 的二叉树最小元素数目是( )。
A) 2h+1 B) h C) 2h-1 D) 2h E) 2h-1
6. 已知队列(13,2,11,34,41,77,5,7,18,26,15),第一个进入队列的元素是13,则第五个出队列的元素是( )。
A) 5 B) 41 C) 77 D) 13 E) 18
7. 下面一段程序是用( )语言书写的。
int func1(int n)
int i,sum=0;
for(i=1;i<=n;i++)
sum+=i*i;
return sum;

A) FORTRAN B) PASCAL C) C D) PROLOG E) BASIC
8. 设全集E=1,2,3,4,5,集合A=1,4,B=1,2,5,C=2,4,则集合(A ∩B)∪~C 为( )。
A) 空集 B) 1 C) 3,5 D)1,5 E) 1,3,5
9. 表达式(1+34)*5-56/7 的后缀表达式为( )。
A) 1+34*5-56/7 B) -*+1 34 5/56 7 C) 1 34 +5*56 7/-
D) 1 34 5* +56 7/- E) 1 34+5 56 7-*/
10. 下列计算机设备,即是输入设备,又是输出设备的是( )。
A) 键盘 B) 触摸屏 C) 扫描仪 D)投影仪 E) 数字化仪
二.不定项选择题(共10题,每题1.5分,共计15分。多选少选均不得分)。
11. 下列分辨率的显示器显示出的图像,最清晰的是( )。
A) 800*600 B) 1024*768 C) 640*480 D) 1280*1024 E) 800*1000
12. 下列说法中,哪个(些)是错误的( )。
A)程序是指令的序列,它有三种结构:顺序、分支和循环。
B)数据总线决定了中央处理器CPU所能访问的最大内存空间的大小。
C)中央处理器CPU内部有寄存器组,用来储存数据。
D)不同厂家生产的CPU所能处理的指令集是相同的。
E)数据传输过程中可能会出错,奇偶校验法可以检测出数据中那一为在传输中出了差错。
13. CPU访问内存的速度比访问下列哪个(些)存储设备要慢( )。
A)寄存器 B)硬盘 C)软盘 D)高速缓存 E)光盘
14. 下列电子邮件地址,哪个(些)是正确的( )。
A)wang@hotmail.com B) cai@jcc.pc.tool.rf.edu.jp C) 162.105.111.22
D) ccf.edu.cn E)http://www.sina.com
15. 数字图像文件可以用下列哪个(些)软件来编辑( )。
A)画笔(Paintbrush) B)记事薄(Notepad) C) Photoshop D) WinRAR E)Midisoft
16. 下列哪个(些)软件不是操作系统软件的名字( )。
A)WindowsXP B) DOS C) Linux D) OS/2 E) Arch/Info
17. 下列哪个(些)不是个人计算机的硬件组成部分( )。
A)主板 B)虚拟内存 C)电源 D)硬盘 E)总线
18. 运算试(2008)10-(3723)8 的结果是( )。
A)(-1715)10 B) (5)10 C) (5)16 D) (101)2 E) (3263)8
19. 已知元素(8,25,14,87,51,90,6,19,20),问这些元素以怎样的顺序进入栈,才能使出栈的顺序满足:8在51前面;90在87的后面;20在14的后面;25在6的前面;19在90的后面。( )。
A)20,6,8,51,90,25,14,19,87
B)51,6,19,20,14,8,87,90,25
C)19,20,90,7,6,25,51,14,87
D)6,25,51,8,20,19,90,87,14
E)25,6,8,51,87,90,19,14,20
20. 假设我们用d=(a1,a2,...,a5),表示无向图G的5个顶点的度数,下面给出的哪(些)组d 值合理( )。
A)5,4,4,3,1 B)4,2,2,1,1 C)3,3,3,2,2
D)5,4,3,2,1 E)2,2,2,2,2
三、问题求解(共2题,每题5分,共计10分)
1. 无向图G有16条边,有3个4度顶点、4个3度顶点,其余顶点的度均小于3,则G至少_______个顶点。
2. 某年级学生共选修6门课程,期末考试前,必须提前将这6门课程考完,每人每天只在下午至多考一门课程,设6门课程为C1,C2,C3,C4,C5,C6,S(Ci)为学习Ci 的学生集合。已知S(Ci)∩S(C6)≠ф,i=1,2,...,5,S(Ci)∩S(Ci+1)≠ф,i=1,2,3,4,S(C5)∩S(C1)≠ф,问至少安排_____天才能考完这6门课程。
四.阅读程序(共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 * 1228 - 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
输出:____________________
五. 完善程序(共2题,第1题每空3分;第2题每空2分。共计28分)。
1. 翻硬币
题目描述:
一摞硬币共有m枚,每一枚都是正面朝上。取下最上面的一枚硬币,将它翻面后放回原处。然后取下最上面的2枚硬币,将他们一起翻面后放回原处。在取3枚,取4枚……直至m枚。然后在从这摞硬币最上面的一枚开始,重复刚才的做法。这样一直做下去,直到这摞硬币中每一枚又是正面朝上为止。例如,m为1时,翻两次即可。
输 入:仅有的一个数字是这摞硬币的枚数m ,0< m <1000。
输 出:为了使这摞硬币中的每一枚都是朝正面朝上所必须翻的次数。
输入样例:30
输出样例:899
程 序:
program Program1;
var m:integer;
function solve(m: integer):integer;
var i,t,d: integer;
flag: Boolean;
begin
if (m = 1) then
solve := (1)
else begin
d := 2*m+1; t := 2; i := 1; flag := False;
repeat
if (t = 1) then
begin
solve := (2) ; flag := True;
end
else if ( (3) ) then
begin
solve := i*m-1; flag := True;
end
else
t := (4) ;
i:=i+1;
until flag;
end
end;
begin
read(m); if (( (5) ) and (m<1000)) then
writeln( (6) );
end.
2. OIM地形
题目描述:
二维离散世界有一种地形叫OIM(OI Mountain)。这种山的坡度只能上升('/')或下降('\'),而且两边的山脚都与地平线等高,山上所有地方都不低于地平线.例如:
/\ /\
/ \/\ 是一座OIM;而 / \ 不是。
\/
这个世界的地理学家们为了方便纪录,给OIM所有可能的形状用正整数编好号,而且每个正整数恰好对应一种山形。他们规定,若两座山的宽度不同,则较宽的编号较大;若宽度相同,则比较从左边开始第1个坡度不同的地方,坡度上升的编号较大。以下三座OIM的编号有小到大递增:
/\ /\ /\ /\
/ \/\ / \/\/\ / \/ \。显然/\的编号为1。但是地理学家在整理纪录是发觉,查找编号与山形的对应关系不是很方便。他们希望能快速地从编号得到山的形状。你自告奋勇答应他们写一个程序,输入编号,能马上输出山形。
输 入:一个编号(编号大小不超过600,000,000),
输 出:输入编号所对应的山形,1座山所占行数恰为它的高度,即山顶上不能有多余空行。
输入样例:15
输出样例: /\ /\
/ \/ \
程 序:
program Program2;
const
L:integer =19; SZ: integer =50;
UP: char = '/'; DN: char = '\';
Var
i,nth,x,y,h,e,f:integer;
m: array[0..1,0..38,0..19] of integer;
pic: array[0..49,0..49] of char;

procedure init;
var k,s,a,b,c: integer;
begin
for a:=0 to 1 do
for b:=0 to 2*L do
for c:=0 to L do
m[a,b,c]:=0; m[0,0,0]:=1;
for k:=0 to 2*L-1 do
begin
for s:=1 to L do
begin
m[0,k+1,s] := m[0,k,s+1] + m[1,k,s+1];
m[1,k+1,s]:= (1) ;
end;
m[0,k+1,0] :=m[0,k,1]+m[1,k,1];
end;
end;

procedure draw(k,s,nth:integer);
begin
if (k=0) then exit;
if ((nth-m[1,k,s])>=0) then
begin
nth:=nth-m[1,k,s];
if (y>h) then (2) ;
pic[y,x]:=UP; y:=y+1; x:=x+1; draw( (3) );
end
else begin
y:=y - 1; pic[y,x]:=DN; x:=x+1; draw(k-1,s-1,nth);
end;
end;

begin
init;
read(nth);
for e:=0 to SZ-1 do
for f:=0 to SZ-1 do
pic[e,f]:= ' ';
x:=0;
y:=0
h:=0;
i:=0;

while ((nth-m[0,2*i,0])>=0) do
begin
nth:= nth-m[0,2*i,0];
(4) ;
end;
draw( (5) );
for i:=h downto x-1 do
begin
for e:=0 to x-1 do
write(pic[i,e]);
writeln(' ');
end;
end.

第十届全国青少年信息学奥林匹克联赛复赛试题
( 普及组 三小时完成 )
(3小时完成,对于每个测试点时限均为1秒,机器配置:PⅣ2.8/512MB)
不高兴的津津
(unhappy.pas/dpr/c/cpp)

【问题描述】

津津上初中了。妈妈认为津津应该更加用功学习,所以津津除了上学之外,还要参加妈妈为她报名的各科复习班。另外每周妈妈还会送她去学习朗诵、舞蹈和钢琴。但是津津如果一天上课超过八个小时就会不高兴,而且上得越久就会越不高兴。假设津津不会因为其它事不高兴,并且她的不高兴不会持续到第二天。请你帮忙检查一下津津下周的日程安排,看看下周她会不会不高兴;如果会的话,哪天最不高兴。

【输入文件】

输入文件unhappy.in包括七行数据,分别表示周一到周日的日程安排。每行包括两个小于10的非负整数,用空格隔开,分别表示津津在学校上课的时间和妈妈安排她上课的时间。

【输出文件】

输出文件unhappy.out包括一行,这一行只包含一个数字。如果不会不高兴则输出0,如果会则输出最不高兴的是周几(用1, 2, 3, 4, 5, 6, 7分别表示周一,周二,周三,周四,周五,周六,周日)。如果有两天或两天以上不高兴的程度相当,则输出时间最靠前的一天。

【样例输入】

5 3
6 2
7 2
5 3
5 4
0 4
0 6

【样例输出】

3

花生采摘
(peanuts.pas/dpr/c/cpp)

【问题描述】

鲁宾逊先生有一只宠物猴,名叫多多。这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!——熊字”。
鲁宾逊先生和多多都很开心,因为花生正是他们的最爱。在告示牌背后,路边真的有一块花生田,花生植株整齐地排列成矩形网格(如图1)。有经验的多多一眼就能看出,每棵花生植株下的花生有多少。为了训练多多的算术,鲁宾逊先生说:“你先找出花生最多的植株,去采摘它的花生;然后再找出剩下的植株里花生最多的,去采摘它的花生;依此类推,不过你一定要在我限定的时间内回到路边。”

我们假定多多在每个单位时间内,可以做下列四件事情中的一件:
1) 从路边跳到最靠近路边(即第一行)的某棵花生植株;
2) 从一棵植株跳到前后左右与之相邻的另一棵植株;
3) 采摘一棵植株下的花生;
4) 从最靠近路边(即第一行)的某棵花生植株跳回路边。
现在给定一块花生田的大小和花生的分布,请问在限定时间内,多多最多可以采到多少个花生?注意可能只有部分植株下面长有花生,假设这些植株下的花生个数各不相同。
例如在图2所示的花生田里,只有位于(2, 5), (3, 7), (4, 2), (5, 4)的植株下长有花生,个数分别为13, 7, 15, 9。沿着图示的路线,多多在21个单位时间内,最多可以采到37个花生。

【输入文件】

输入文件peanuts.in的第一行包括三个整数,M, N和K,用空格隔开;表示花生田的大小为M * N(1 <= M, N <= 20),多多采花生的限定时间为K(0 <= K <= 1000)个单位时间。接下来的M行,每行包括N个非负整数,也用空格隔开;第i + 1行的第j个整数Pij(0 <= Pij <= 500)表示花生田里植株(i, j)下花生的数目,0表示该植株下没有花生。

【输出文件】

输出文件peanuts.out包括一行,这一行只包含一个整数,即在限定时间内,多多最多可以采到花生的个数。

【样例输入1】

6 7 21
0 0 0 0 0 0 0
0 0 0 0 13 0 0
0 0 0 0 0 0 7
0 15 0 0 0 0 0
0 0 0 9 0 0 0
0 0 0 0 0 0 0

【样例输出1】

37

【样例输入2】

6 7 20
0 0 0 0 0 0 0
0 0 0 0 13 0 0
0 0 0 0 0 0 7
0 15 0 0 0 0 0
0 0 0 9 0 0 0
0 0 0 0 0 0 0

【样例输出2】

28

FBI树
(fbi.pas/dpr/c/cpp)

【问题描述】

我们可以把由“0”和“1”组成的字符串分为三类:全“0”串称为B串,全“1”串称为I串,既含“0”又含“1”的串则称为F串。
FBI树是一种二叉树 ,它的结点类型也包括F结点,B结点和I结点三种。由一个长度为2N的“01”串S可以构造出一棵FBI树T,递归的构造方法如下:
1) T的根结点为R,其类型与串S的类型相同;
2) 若串S的长度大于1,将串S从中间分开,分为等长的左右子串S1和S2;由左子串S1构造R的左子树T1,由右子串S2构造R的右子树T2。
现在给定一个长度为2N的“01”串,请用上述构造方法构造出一棵FBI树,并输出它的后序遍历 序列。

【输入文件】

输入文件fbi.in的第一行是一个整数N(0 <= N <= 10),第二行是一个长度为2N的“01”串。

【输出文件】

输出文件fbi.out包括一行,这一行只包含一个字符串,即FBI树的后序遍历序列。

【样例输入】

3
10001011

【样例输出】

IBFBBBFIBFIIIFF

【数据规模】

对于40%的数据,N <= 2;
对于全部的数据,N <= 10。

火星人
(martian.pas/dpr/c/cpp)

【问题描述】

人类终于登上了火星的土地并且见到了神秘的火星人。人类和火星人都无法理解对方的语言,但是我们的科学家发明了一种用数字交流的方法。这种交流方法是这样的,首先,火星人把一个非常大的数字告诉人类科学家,科学家破解这个数字的含义后,再把一个很小的数字加到这个大数上面,把结果告诉火星人,作为人类的回答。
火星人用一种非常简单的方式来表示数字——掰手指。火星人只有一只手,但这只手上有成千上万的手指,这些手指排成一列,分别编号为1,2,3……。火星人的任意两根手指都能随意交换位置,他们就是通过这方法计数的。
一个火星人用一个人类的手演示了如何用手指计数。如果把五根手指——拇指、食指、中指、无名指和小指分别编号为1,2,3,4和5,当它们按正常顺序排列时,形成了5位数12345,当你交换无名指和小指的位置时,会形成5位数12354,当你把五个手指的顺序完全颠倒时,会形成54321,在所有能够形成的120个5位数中,12345最小,它表示1;12354第二小,它表示2;54321最大,它表示120。下表展示了只有3根手指时能够形成的6个3位数和它们代表的数字:

三进制数 123 132 213 231 312 321
代表的数字 1 2 3 4 5 6

现在你有幸成为了第一个和火星人交流的地球人。一个火星人会让你看他的手指,科学家会告诉你要加上去的很小的数。你的任务是,把火星人用手指表示的数与科学家告诉你的数相加,并根据相加的结果改变火星人手指的排列顺序。输入数据保证这个结果不会超出火星人手指能表示的范围。

【输入文件】

输入文件martian.in包括三行,第一行有一个正整数N,表示火星人手指的数目(1 <= N <= 10000)。第二行是一个正整数M,表示要加上去的小整数(1 <= M <= 100)。下一行是1到N这N个整数的一个排列,用空格隔开,表示火星人手指的排列顺序。

【输出文件】

输出文件martian.out只有一行,这一行含有N个整数,表示改变后的火星人手指的排列顺序。每两个相邻的数中间用一个空格分开,不能有多余的空格。

【样例输入】

5
3
1 2 3 4 5

【样例输出】

1 2 4 5 3

【数据规模】

对于30%的数据,N<=15;
对于60%的数据,N<=50;
对于全部的数据,N<=10000;
参考技术A 一.有些答案可以事先记住规律(如某些数列,或快排),这样一眼就看出来了.
二.只有算,如果数据量不是特别大,否则就先算,然后找一找规律.(这样一定行,但要有耐性,数据量太大的题不可能没规律的,否则只有电脑能算出来)
看了 还有时间的话各方面的题目都做一点 毕竟临阵磨枪 不快也光
没时间的话 题目上的的那一组数据是会出现在测试数据中的 实在不行就用选择语句判断 当那一组数据出现时则输出它给出的答案(非常反对 最多用一题 得个10分的安慰分 毕竟是投机取巧)本回答被提问者采纳
参考技术B http://bbs.oifans.cn/read-oifans-tid-512.html
例届所有题目都有了 自己下 不用注册
包括解体报告

守望者逃离 pascal 2007NOIP普及组第三题

var i,j,k,n,m,t,s:longint;
begin
assign(input,'escape.in'); reset(input);
assign(output,'excape.out'); rewrite(output);
readln(m,s,t); k:=0; j:=0;
for i:=t downto 1 do
begin
inc(j);
if m>=10 then begin inc(k,60); dec(m,10); end
else
begin
if (m<2) then
begin
if (s-k<51)or(i<3) then inc(k,17)
else inc(m,4);
end
else
if (m<6) then
begin
if(s-k<34)or(i<2) then inc(k,17)
else inc(m,4);
end
else if(m<10) then
begin
if (s-k<17)or(i=1) then inc(k,17)
else inc(m,4);
end;
end;
if s-k<=0 then begin writeln('Yes'); writeln(j); break; end;
end;
if s-k>0 then begin writeln('No'); writeln(k); end;
close(input); close(output);
end.

我写的……过9个点……没过的那个点输出是331……标准输出是330……

高手帮忙看下……

你可以看看我的 思路几乎和你一样 看你的程序 应该是在FOR 中的else 判断有点没考虑全 估计是m小于3的时候
var
m,s,f,t,time,i:longint;
k:boolean;
begin
K:=false;
readln(m,f,time);
s:=f;
t:=time;
while (m>=10)and(t>0) do
begin
m:=m-10;
dec(t);
s:=s-60;
if s<=0 then begin k:=true; writeln('Yes'); writeln(time-t); break;end;
end;
if (not(k)) and (t<=0) then begin k:=true;writeln('No');writeln(f-s);end;
if not(k) then begin
while (t>0) and (s>0) do
begin
if (m<=1) and (s>119) and (t>=7)
then begin
t:=t-7;
s:=s-120;
end
else
if (t>=2) and (m>=6) and (s>34)
then begin
t:=t-2;
m:=m-6;
s:=s-60;
end
else
if (t>=3) and(m>=2) and(s>51)
then begin
t:=t-3;
m:=m-2;
s:=s-60;
end
else
begin
dec(t);
s:=s-17;
end;
end;

if s<=0 then if t>=0 then begin writeln('Yes'); writeln(time-t);end
else begin writeln('No');writeln(f-s);end
else begin writeln('No');writeln(f-s);end;
end;
end.

参考资料:自己程序

参考技术A 你最好用动规+高精度 参考技术B 你先说一下你的思想 参考技术C 你可以看看我的
思路几乎和你一样
看你的程序
应该是在FOR
中的else
判断有点没考虑全
估计是m小于3的时候
var
m,s,f,t,time,i:longint;
k:boolean;
begin
K:=false;
readln(m,f,time);
s:=f;
t:=time;
while
(m>=10)and(t>0)
do
begin
m:=m-10;
dec(t);
s:=s-60;
if
s<=0
then
begin
k:=true;
writeln('Yes');
writeln(time-t);
break;end;
end;
if
(not(k))
and
(t<=0)
then
begin
k:=true;writeln('No');writeln(f-s);end;
if
not(k)
then
begin
while
(t>0)
and
(s>0)
do
begin
if
(m<=1)
and
(s>119)
and
(t>=7)
then
begin
t:=t-7;
s:=s-120;
end
else
if
(t>=2)
and
(m>=6)
and
(s>34)
then
begin
t:=t-2;
m:=m-6;
s:=s-60;
end
else
if
(t>=3)
and(m>=2)
and(s>51)
then
begin
t:=t-3;
m:=m-2;
s:=s-60;
end
else
begin
dec(t);
s:=s-17;
end;
end;
if
s<=0
then
if
t>=0
then
begin
writeln('Yes');
writeln(time-t);end
else
begin
writeln('No');writeln(f-s);end
else
begin
writeln('No');writeln(f-s);end;
end;
end.

以上是关于Noip提高组pascal题目的主要内容,如果未能解决你的问题,请参考以下文章

2017.08.05NOIP提高组模拟赛B组

noip普及组2010模拟试题(pascal)

noip(提高组难度)动态规划有哪几种类型?(如:坐标DP、背包DP等) 各都有哪些经典题目?

noip2009初赛答案

NOIP2011提高组(选择客栈)

noip2010提高组复赛第一题(被大牛们称为水题)不会做!