急求pascal初中普及组资料
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了急求pascal初中普及组资料相关的知识,希望对你有一定的参考价值。
就要参加比赛了大家有什么pascal复习资料 计算机基础知识大纲 会考到的概念 试卷什么的尽管向上贴 分不是问题
拜托了!!
邮箱422043491@qq.com
QQ:422043491
有的尽管发给我 谢谢帮忙了 !
知识是基础,能力最重要
NOIP初赛考的知识点,大纲上有3块:计算机基本常识、计算机基本操作、程序设计基本知识。具体来说:选择题考查的是计算机基本常识、基本操作和程序设计中的一些基本数据结构与基本算法;而填空题更加重视能力(尤其是队列、栈、二叉树等数据结构、数学问题、归纳法、数列和逻辑推理等)的考查;读程序写运行结果考察的是对程序的理解和跟踪,重在分析推理能力。读程序的4条题目往往有一定的层次,试卷中给出程序的并不复杂,语句的含义容易明白,但是悟性好的选手总是很快就能体会到程序的设计思路并得出正确的答案,机械模仿计算机手工逐步算出结果的同学往往做的很慢,造成时间不够,而且容易失误;完善程序更是考察程序设计能力,尤其是在明确算法和数据结构的条件下,如何编程。读程序和完善程序,需要在平时的学习中提高,经常阅读、讨论和研究别人的优秀程序,提高自己的理解力和速度。
各种题型的解题经验(以2002、2001年试题为例)
选择题(30分=20*1.5)
一般是比较容易得分的,不可错过!
程序设计方面的知识多是平时计算机课堂教学或课外活动中学到的,建议大家找全国计算机等级考试(一、二级)的题目做做,一般不超过二级的知识点,知识要复习的系统一些。新大纲和最近两年的考试不再考DOS,但有DOS经验的选手可能会占一点便宜,因为有些题目可以根据经验判断。另外,往更高层次发展的过程中,必要的DOS知识和命令还是必须的。
分布:5-6个数据结构或算法方面的基本知识(高中组更多一些!!!);
NOIP初赛谈2 填空
填空(15分左右,2-3题)
这部分题目对数学要求要高一点,往往考查的是数学问题(如代数变形、组合、概论统计等),数列(一般是考递推、递归、归纳法等),逻辑推理;也考查一些算法和数据结构知识(如队列、栈、二叉树)。建议大家多花一点时间做,尽量做对。
1.数组A[30..100,20..100]以行优先的方式存储,每个元素占8个字节,且已知A[40,30]的地址为20000,则A[60,90]的地址为:_________________。如果以列优先存储,则为:_________________。
解答:设数组首地址为X,则:X+((40-30)*(100-20+1)+(30-20))* 8 = 20000
(前面的行数*每行的列数+本行中序号)*每个元素的长度+首地址
则:X=13340,用上述的式子,不难算出:A[60,90]的地址:33340
列优先存储,只要稍微改动上述公式,结果略;
考查了数据结构中数组存储方式。还可以考数组基类型为记录的情况,可以问你同样的问题;或者问你共占用多少空间!
2.(1998年初中组)设栈S的初始状态为空,现有5个元素组成的序列1,2,3,4,5,对该序列在S 栈上依次进行如下操作(从序列中的1开始,出栈后不在进栈):进栈,进栈,进栈,出栈,进栈,出栈,进栈,问出栈的元素序列是:_________,栈顶指针的值为______,栈顶元素为:___________________。
解答:出栈序列为3,4,栈顶指针值为3,栈顶元素为5。
考查了数据结构中的栈。还可以把栈和队列结合起来考!如下题:
3.如2002年高中组:设栈S和队列Q初始状态为空,元素e 1 ,e 2 ,e 3 ,e 4 ,e 5 ,e 6依次通过栈S,一个元素出栈后即进入队列Q,若出队顺序为e 2 ,e 4 ,e 3 ,e 6 ,e 5 ,e 1 ,则栈S的容量至少应该为______________。
解答:为3。
4.(2000年初中组)设循环队列中数组的下标范围是1..n,其头尾指针分别为f和r,则其元素个数为:_____________________。
解答:(r-f+n)mod n
考查了数据结构中的队列。
5.中缀表达式、前缀表达式、后缀表达式(1997年初中组)
(1) 已知中缀表达式:A+B*C/D
求它的前缀表达式和后缀表达式?
(2)已知前缀表达式:+△A*B△C 注△表示一元运算符负号,即△A表示-A
求它的中缀表达式和后缀表达式?
解答:中缀表达式即为中序遍历,前缀表达式即为前序遍历,后缀表达式即为后序遍历。
画(二叉)表达式树。首先从右到左查找(+,-)号(不查找括号内的符号);如果找到符号将符号左右分为两部分,符号为树根,左边为左子树;右边为右子树。如果没有找到,再查找(*,/)做同样操作,如果还找不,一种为只剩下数字或者有括号,则可以去掉括号。
(1)的结果:+A*B/CD;ABCD/*+
可以将△A先看为一个整体建树,然后再分解△A。
(2)的结果:(-A)+B*(-C);A△BC△*+
考查了数据结构中的表达式树。
6.(1998年初中组) 已知一个数列U1,U2,U3...Un...,往往可以找到一个最小的K值和K个数a1,a2,..,ak,使得数列从某项开始都满足:U(n+k)=a1*U(n+k-1)+a2*U(n+k-2)+......+akUn (式A)
例如数列 1,1,2,3,5......可以发现:当K=2,a1=1,a2=1时,从第3项起(N>=1)满足:
U(n+2)=U(n+1) + Un
试对数列1^3 ,2^3 ,3^3 ,......,N^3,……,求K和a1,a2,...ak,使得式A成立。
解答:解方程,先设K=2,列出方程组:
a1*23+a2*13=33
a1*33+a2*23=43
以上方程组无整数解。再设K=3,列出方程组:
a1*02+a2*12+a3*22=32
a1*12+a2*22+a3*32=42
a1*22+a2*32+a3*42=52
以上方程的整数解为:a1=1,a2=-3,a3=3,此时K=3。
实质是考数学。
7.(1998年高中组)给出一棵二叉树的中序遍历:DBGEACHFI与后序遍历:DGEBHIFCA,画出此二叉树。
8.(1996年高中组)下面是一个利用完全二叉树特性,用顺序表来存储的一个二叉树,结点数据为字符型(结点层次从小到大,同一层从左到右顺序存储,#表示空结点,@表示存储数据结束)。
结点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
数据 A B C # # D E # # # # # G F @
请画出对应的二叉树。
解答:以上两题的图分别如下:
以上两题实质是考数据结构中的二叉树。还经常考二叉树的计数!如下题:
9.如:(2000年初中组)已知按中序遍历二叉树的结果为:abc,问:有多少种不同形态的二叉树可以得到这一遍历结果,并画出这些二叉树。
解答:5种,形态如下:
10.(1999年初中组)在磁盘的目录结构中,我们将与某个子目录有关联的目录数称为度。例如下图
该图表达了A盘的目录结构:D1,Dll,…,D2均表示子目录的名字。在这里,根目录的度为2,D1子目录的度为3,D11子目录的度为4,D12,D2,D111,D112,D113的度均为1。不考虑子目录的名字,则可简单的图示为如下所示的树结构:
若知道一个磁盘的目录结构中,度为2的子目录有2个,度为3的子目录有1个,度为4的子目录有3个。
试问:度为1的子目录有几个?
解答:一种方法是画图;另外,可以根据整棵树的入度=出度(因为任一根关联边连接两个结点)这一性质推导,除根结点外的每个结点入度都是1,所以总的入度=1*x+1*2+1*1+1*3-1;每个叶结点的出度为0,分支结点的出度为度数-1,根结点的出度就是它的度,所以总的出度=0*x+(2-1)*2+(3-1)*1+(4-1)*3+1;算出:x=9。
考查了计算机中的目录结构和树结构中的“度”的概念和性质。
11.(1998年高中组)用邻接矩阵/邻接表表示下面的无向/有向图(略)。
考查了数据结构中的图的表示。
12.(1999年初中)根据Nocomachns定理,任何一个正整数n的立方一定可以表示成n个连续的奇数的和。
例如:
13=1
23=3+5
33=7+9+11
43=13+15+17+19
在这里,若将每一个式中的最小奇数称为X,那么当给出n之后,请写出X与n之间的关系表达式:_________________________。
解答:X=n*(n-1)+1
考查代数和递推能力!
13.(2000年高中组)设有一个共有n级的楼梯,某人每步可走1级,也可走2级,也可走3级,用递推公式给出某人从底层开始走完全部楼梯的走法。例如:当n=3时,共有4种走法,即1+1+1,1+2,2+1,3。
解答:两种方法,一是“猜”+“凑”,从具体的n=1,2,3……算起,只能算比较简单的,容易错;二是用组合数学和归纳法进行推导,一般先假设F(n)= a*F(n-1)+b*F(n-2)+c*F(n-3)+……,然后算a,b,c……直到某个系数=0就结束,再代入式子中。
F(1)=1 F(2)=2 F(3)=4
F(N)=F(N-3)+F(N-2)+F(N-1) (N≥4)
14.(2000年初中组)有2×n的一个长方形方格,用一个1×2的骨牌铺满方格。例如n=3时,为2×3方格。此时用一个1×2的骨牌铺满方格,共有3种铺法:
试对给出的任意一个n(n>0),求出铺法总数的递推公式。
解答:F(1)=1 F(2)=2
F(n)=F(n-2)+F(n-1)(n≥3)
以上两题,考察了归纳+加法原理+乘法原理+递归关系式!这是近年来的常见题。
15.(2002年初中组) 将N个红球和M个黄球排成一行。例如:N=2,M=3可得到以下6种排法:红红黄黄黄红黄红黄黄 红黄黄红黄 黄红红黄黄 黄红黄红黄 黄黄黄红红。
问题:当N=4,M=3时有多少种不同排法?(不用列出每种排法)
解答:35
排列组合和概率统计!
16.(1999年高中组)将Ln定义为求在一个平面中用n条直线所能确定的最大区域数目。例如:当n=1时,L1=2,进一步考虑,用n条折成角的直线(角度任意),放在平面上,能确定的最大区域数目Zn是多少?例如:当n=1时,Z1=2(如下图所示)
当给出n后,请写出以下的表达式:
1 Ln = ______________
2 Zn = _______________
解答:本题实质是求直线或折线将一个平面分成的最大区域数,从两个方面考虑:
(1) 求在一个平面中用n条直线所能确定的最大区域数;
n=1,L1=2, F(1)=2
n=2,L2=4, F(2)=F(1)+2
n=3,L3=7, F(3)=F(2)+3
n=4,L4=11, F(4)=F(3)+4
……
所以, F(n)=F(n-1)+n
把上面的n个等式左右相加,化简得出:F(n)=2+2+3+4+……+n
即:L(n)=n*(n+1)/2+1
(2) 求在一个平面中用n条折线所能确定的最大区域数;
n=1,Z1=2, F(1)=0+2
n=2,Z2=7, F(2)=1*(2*2-1)+4
n=3,Z3=16, F(3)=2*(2*3-1)+6
n=4,Z4=29, F(4)=3*(2*4-1)+8
……
所以, F(n)=(n-1)*(2*n-1)+2*n
即:Z(n)=(n-1)*(2*n-1)+2*n
几何+归纳+组合数学!
17.(1998年初中组)某班有50名学生,每位学生发一张调查卡,上写a,b,c三本书的书名,将读过的书打ü,结果统计数字如下: 只读a者8人;只读b者4人;只读c者3人;全部读过的有2人;读过a,b两本书的有4人;读过a,c两本书的有2人;读过b,c两本书的有3人;问:
(1)读过a的人数是 (2)一本书也没有读过的人数是 。
解答:(1)12人 (2)30人
方法:推理或集合表示如下:
a=8;b=4;c=3;abc=2;ab=4-abc=2;ac=2-abc=0;bc=3-abc=1;
读过a的人数为:a+ab+abc+ac=8+2+2+0=12
一本未读过的人:50-a-b-c-abc-ab-ac-bc=30
逻辑推理+集合运算及变形!
近两年NOIP初赛填空题举例:
2002年高中(1)
在书架上放有编号为1 ,2 ,...,n的n本书。现将n本书全部取下然后再放回去,当放回去时要求每本书都不能放在原来的位置上。例如:n = 3时:
原来位置为:1 2 3
放回去时只能为:3 1 2 或 2 3 1 这两种
问题:求当n = 5时满足以上条件的放法共有多少种?(不用列出每种放法)
解答:f(n)=n*f(n-1)+ -1(n>1,且n为偶数时取+,n为奇数时取-)
f(1)=0
所以,当n=5时,满足以上条件的方法共有44种。
2002年高中(2)
设有一棵k叉树,其中只有度为0和k两种结点,设n 0 ,n k ,分别表示度为0和度为k的结点个数,试求出n 0 和n k之间的关系(n 0 = 数学表达式,数学表达式仅含n k 、k和数字)。
解答:n0和nk之间的关系为:n0=(k-1) nk+1。
2002年初中(1)
如下图,有一个无穷大的的栈S,在栈的右边排列着1,2,3,4,5共五个车厢。其中每个车厢可以向左行走,也可以进入栈S让后面的车厢通过。现已知第一个到达出口的是3号车厢,请写出所有可能的到达出口的车厢排列总数(不必给出每种排列)。
出口← ← 1 2 3 4 5
S↓
解答:9
2002年初中(2)
将N个红球和M个黄球排成一行。例如:N=2,M=3可得到以下6种排法:红红黄黄黄红黄红黄黄 红黄黄红黄 黄红红黄黄 黄红黄红黄 黄黄黄红红
问题:当N=4,M=3时有多少种不同排法?(不用列出每种排法)
解答:35
2001年高中(1)
已知一棵二叉树的结点名为大写英文字母,其中序与后序遍历的顺序分别为:CBGEAFHDIJ与CGEBHFJIDA,则该二叉树的先序遍历的顺序为:
解答:ABCEGDFHIJ
2001年高中(2)
平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。问用这些点为顶点,能组成多少个不同四边形?
解答:2250
2001年初中(1)
在a,b,c,d,e,f六件物品中,按下面的条件能选出的物品是: 。
(1)a,b两样至少有一样
(2)a,d不能同时取
(3)a,e,f中必须有2样
(4)b,c要么都选,要么都不选
(5)c,d两样中选一样
(6)若d不选,则e也不选
解答: a,b,c,f
2001年初中(2)
平面上有三条平行直线,每条直线上分别有7,5,6个点,且不同直线上三个点都不在同一条直线上。问用这些点为顶点,能组成多少个不同三角形?
解答:751。
NOIP初赛谈3 阅读程序
阅读程序,写运行结果(25分左右,3-4题)
其实很容易,目的几乎是送分,而且占的分数很多,但得分率却不见得高。很容易不明不白的就把分(全)丢了!!!
这部分程序考3个方面:
1. 程序设计语言本身,如循环、递归、值型参和变量型参数、跟踪变量等;
2. 归纳和数学运算能力;
3. 是否掌握了一些常用算法(程序段)的框架;
4. 细心、耐心等心理品质;灵感+编程的量等;
一般做这类题目的核心是找程序目的:
即这个程序想干什么。迄今为止考过的题目还没有“乱写”的,总有一点“写作目的”的。抓住了它,不仅得出答案变得很容易了,而且对自己的结果也会比较有信心。
一般的解题步骤如下:
1. 从总体上通读程序,大致把握程序的目的和算法;
2. 猜测变量的作用,跟踪主要变量值的变化(列表),找出规律;
3. 将程序分段,理清每一小段的作用和目的(灵感+关键表达式和语句的领会);
4. 看清输入、按照输出格式,写出结果;
5. 带着得到的结果回到程序进行检查;
下面举几个例子。
1.基本题(考语言本身,尤其是循环嵌套。1999年初中组)
Program excpl;
var
x, y, y1, jk, j1, g, e: 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.
程序运行结果为:___________________________。
解答:
程序不长,但是有一定的难度。高手最多半分钟就看懂了程序的意思,但初学者往往算了很久得出了结果却是错的。下面我们还是先以一个初学者的身份分析一下这个程序。记住,不要一开始就模拟电脑来一个个语句“执行”-------你算过自己是多少Hz的CPU没有?!
首先是看看变量的名字,可惜分区联赛题目中的变量不是i就是j,很讨厌。i和j一般作为循环计数器,没有什么意思,因此不要管它了。然后要看变量在程序的哪里出现过,着重看它与其它变量的相互引用关系,猜测它的作用。例如上题:x只在g:=x中出现,暂时不要管它,因为它很可能只是一个初始数据。y有三处:1) while y<>0 do
2) y1:=y mod 10;
3) y:=y div 10;
很明显,y每次少了最后一位数字,把这位数字给了y1。有经验的选手应该体会到了什么,不过我们继续。
现在我们知道了:y对程序的作用是:每次提供最后一位给y1,即y1每次的值依次是:4,6,2
那么再看y1,它出现在两个地方:
1)while y1<>0 do
2)y1=y1-1
很明显就是一个循环次数嘛!循环y1次!
再看jk:
1)for e:=jk downto 1 do
2)jk:=jk-1
jk作为循环初始值,居然一次比一次少...其原因有待进一步分析。
再看j1:
1)for j1:=1 to 20 do a[j1]:=0;
2)j1:=1;
3)while a[j1]=0 do j1:=j1+1;
4)for Jk:=j1 to 20 do write(a[jk]:4);
显然,j1和其它变量没有什么联系。1)是初始化,2)3)4)是输出数组a。
再看g: 出现的位置是几层循环之内了,应该很重要!一会儿再分析!
再看e: 作为循环变量,没有什么意思。
通过变量分析,我们知道了:x,y是数据,y每次提供最后一位给y1,循环y1次。j1和g的作用有待分析。
下面根据程序结构,把程序分成几块,逐个研究。最主要的程序段是两个WHILE循环中套一个FOR循环,三重循环!!!其实,最外面一层很明确:判断什么时候结束(y=0)。前后都很简单,是一些变量和数组的初始化、输入、输出等,下面重点剖析核心程序段。
1) x:=3465; y:=264; jk:=20;
for j1:=1 to 20 do a[j1]:=0;
输入与变量、数组的初始化,不要管它。
2)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;
3)
j1:=1;
while a[j1]=0 do j1:=j1+1;
for Jk:=j1 to 20 do write(a[jk]:4);
writeln
从前往后,找到<>0的位置开始,输出数组元素的值(输出结果),也不要管它。
块2最重要。
它的思想是:每次取Y的最第位y1,执行<<运算>>y1次,每次把jk减1。
现在最重要的是<<运算>>中的在干什么?
注意到最后输出的a[],要留意a[]的变化!
a[e]总是取个位(g mod 10),g每次少一位,和a[e-1](别忘了e在循环!)相加...
难道是...高精度加法???RIGHT!
它执行了y1次,y1每次都是y的个位!对了。程序就是在做x*y
所以答案就是 3465*264=914760
再看它的输出格式,输出的应该是:___9___1___4___7___6___0
其实有经验的话,看到g这个变量名和g:=g+a[e]; a[e]:=g mod 10;这几个标志句子。就可以一下子知道程序的用意了。
总结一下本题:重点考循环嵌套的执行过程以及对除法运算中的商、余数的基本方法;主要程序段可以通过列表了解变量的变化情况;要细心、耐心;题目的本身没有多少值得研究的价值!!!但有些题目纯粹考算法思路,如下面的例子:
2. 算法题
program ex2;
var i,j,n:longint;
b:array [0..31] of 0..1;
begin
n=1999;
i:=0;
while n<>0 do begin
b[i]:=n mod 2;
i:=i+1;
n:=n div 2
end;
for j:=i-1 downto 0 do write(b[j]);
end.
输出什么?
解答:很明显,是把十进制整数转换成二进制数,所以输出11111001111
3.有些题目则是考数学,或根据一些基本规则重复地做某个操作。如:
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.
输入:8 9 -1 24 6 5 11 15 -28 9
输出:max=
解答:本题主要做累加:s:= s+a[i];再根据结果打擂台。
但最关键的语句是:if s<0 then s:=0;它的作用是把s<0的前若干个元素的和值屏蔽掉(置0)。了解了这一点,题目就很简单了。步骤如下:
s<0? s=8 s>max? max=8;
I=2 N 8+9=17 Y max=17;
I=3 N 17-1=16 N max=17;
I=4 N 16+24=40 Y max=40;
I=5 N 10+6=46 Y max=46;
I=6 N 46+5=51 Y max=51;
I=7 N 51+11=62 Y max=62;
I=8 N 62+15=77 Y max=77;
I=9 N 77-28=49 N max=77;
I=10 N 49+9=58 N max=77;
所以结果为:77。
小结:本质是求一个n长的整数数列的连续x长的子序列,要求子序列的和最大!
注意:s和max!!!另外本题给的输入数据比较简单,所以有很多人没有完全懂也算对了结果,把数据改成如下:-1 12 -103 65 34 -4 -27 8 -1234 9,问结果是多少呢?答:9!!!
4.考子程序的调用,尤其是递归或带参数(值参与变量型参数),如:
PROGRAM EX3;
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.
解答过程:
(1) 如果有子程序,一般先读主程序,了解主程序什么时候调用子程序?干什么的?调用了多少次?本题调用了n-1次,并且累加函数的返回值!
(2) 再单独阅读子程序,分析变量、参数和返回值,确定它的功能。本题函数猛一看好象比较复杂,不过是通过一个循环结构完成累乘和累除,下面再具体分析!
(3) 通过列表,观察子程序中的变量变化情况,以便找出规律,确定子程序的作用。本题如下:
CO(2)=10*9/2
CO(3)=10*9*8/2/3
CO(4)=10*9*8*7/2/3/4
……
发现,好象是组合数学的公式:CO(i)=10!/(i!*(10-i)!)
即:C(m,n)=m!/(n!*(m-n)!)=m*(m-1)*……*(m-n+1)/n!
(4) 所以结果很明确:C(10,0)+ C(10,1)+……+C(10,9)+ C(10,10)=722
总结:灵感来源于丰富的数学基础和经验! 参考技术A 分区联赛初赛复习
初赛考的知识点就是计算机基本常识、基本操作和程序设计基础知识。其中选择题考查的是知识,而问题解决类型的题目更加重视能力的考查。一般说来,选择题只要多用心积累就可以了。问题解决题目的模式比较固定,大家应当做做以前的题目。写运行结果和程序填空也需要多做题目,并且培养良好的程序阅读和分析能力,就像语文的阅读理解一样。
近几年来,初赛的考查范围有了很大的变化,越来越紧跟潮流了。这就需要大家有比较广泛的知识,包括计算机硬件、软件、网络、简单的数据结构(例如栈、队列、树和图等)和简单的算法(例如排序、查找和搜索等),程序设计语言以及一些基本的数学知识和技巧(例如排列组合)。但最主要的,还是取决于你对程序设计语言的熟悉程度,再加上认真仔细的心态。
练习
下面四个不同进制的数中,最小的一个是 。
(A)(11011001)2 (B)(75)10 (C)(37)8 (D)(A7)16
如果52-19=33是成立的,则52、19、33分别是 。
(A)八进制、十进制、十六进制 (B)十进制、十六进制、八进制
(C)八进制、十六进制、十进制 (D)十进制、八进制、十六进制
把下列二进制数分别化成八进制数、十六进制数和十进制数。
(1)1110B (2)-101010B (3)10.0101B (4) 101101.11B
把下列十进制数转换成二进制数(按0舍1入取6位二进制小数)。
(1) 75 (2)1024 (3)0.2 (4)18.692
用8位二进制定点整数或定点小数写出下列真值的原码、补码形式,然后用2位十六进制数表示。
(1)11001B (2)-10010B (3)100000B (4)-100000B (5)0.1B
(6)-0.1B (7) 0.100111B (8) –0.100111B (9)-15/128D
已知x的补码,写出补码的十六进制表示,再求出x的原码。
(1)[x]补=01010011B (2)[x]补=10001001B
(3)[x]补=11111111B (4)[x]补=11000000B
已知[x]原=10011011是定点纯小数,写出x的浮点数规格化形式。设其阶码是4位补码,尾数是8位原码。
1.数组A[30..100,20..100]以行优先的方式存储,每个元素占8个字节,且已知A[40 ,30] 的地址为2000,则A[60,90]的地址为:_________________ 如果以列优先存储,则为:_________________
考查了数据结构中数组存储方式。
^^^^^^^^ ^^^^
2.设栈S的初始状态为空,现有6个元素组成的序列1,3,5,7,9,11,对该序列在S 栈上依 次进行如下操作(从序列中的1开始,出栈后不在进栈):进栈,出栈,进栈,进栈, 进栈,进栈 ,出栈,进栈,问出栈的元素序列是:_________,栈顶指针的值为______ 栈顶元素为:___________________
考查了数据结构中的栈。
^^^^^^^^ ^^
3.把中缀表达式写成后缀及前缀表达式
(1) (P+Q)*(A-B)/((C+D)/(E-F))-G
后:_________________
前:_________________
(2) A-C*D+B/E*(D/A)
后:_________________
前:_________________
4.根据后缀表达式,写出前缀及中缀表达式
ABC/DE+GH-/*+
前:_________________
中:_________________
这两题实际上考查了数据结构中的表达式树
^^^^^^^^ ^^^^^^^^
5.用一个字节来表示整数,最高位用作符号位(1为正,0为负),其他位表示数值,
(1)这样的表示法称为原码表示法,表示数的范围为:_________________
(2)原码表示法,将出现_________________有两种表示
(3)实际上计算机中是用补码表示数,其表示范围为:_________________
考查了数的原码,补码表示。
6.已知N*N个数据成方阵排列:
A11 A12 A13 ... A1n
A21 A22 A23 ... A2n
...
An1 An2 An3 ... Ann
已知Aij=Aji,
(1)将A11,A21,A22,A31,A32,A33... 存储到一维数组A(1),A(2),A(3)...A(K)
给出i,j 写出求K的表达式:_________________
(2)将A11,A12,...A1n,A22,A23,...A2n,A33... Ann存储到一维数组A(1),A(2),
A(3)...A(K), 给出i,j 写出求K的表达式:_________________
7.已知一个数列U1,U2,U3...Un...,往往可以找到一个最小的K值和K个数a1,a2,..,ak, 使得数列从某项开始都满足:U(n+k)=a1*U(n+k-1)+a2*U(n+k-2)+...+akUn (式A) 例如数列 1,1,2,3,5...可以发现:当K=2,a1=1,a2=1时,从第3项起(N>=1)满足: U(n+2)=U(n+1) + Un
试对数列1^3 ,2^3 ,3^3 ,...,N^3,...,求K和a1,a2,...ak,使得式A成立.
实质是考数学。
8.给出一棵二叉树的中序遍历:DBGEACHFI与后序遍历:DGEBHIFCA,画出此二叉树
9.给出二叉树的前序遍历与后序遍历,能确定一棵二叉树吗,举例说明.
10.下面是一个利用完全二叉树特性,用顺序表来存储的一个二叉树,结点数据为字符型(结 点层次从小到大,同一层从左到右顺序存储,#表示空结点,@表示存储数据结束)
结点 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
数据 A B C # # D E # # # # # G F @
画出对应的二叉树:
考查了数据结构中的二叉树
^^^^^^^^ ^^^^^^
10.用邻接矩阵表示有向图(图略)
考查了数据结构中的图的表示
^^^^^^^^ ^^
11 根据Nocomachns定理,任何一个正整数n的立方一定可以表示成n个连续的奇数的和。
例如:
13=1
23=3+5
33=7+9+11
43=13+15+17+19
在这里,若将每一个式中的最小奇数称为X,那么当给出n之后,请写出X与n之间的关系表达式:___
其实是考代数
12 某班有50名学生,每位学生发一张调查卡,上写a,b,c三本书的书名,将读过的书打“*”,结果统计数字如下:
只读a者8人;只读b者4人;只读c者3人;全部读过的有2人;读过a,b两本书的有4人;读过a,c两本书的有2人;读过b,c两本书的有3人。
(1)读过a的人数是( )。
(2)一本书也没读过的人数是( )。
一个商场有m种颜色的小球,每种小球足够多,在这m种小球中挑选n个小球的选法有多少种?
如 m=2,n=3 时有4种选法分别是:两种小球的个数分别为03,12,21,30.问:当m=4,n=4时
选法数=__________。35
如果一棵m度树中有n1个度为1的结点,n2个度为2的结点,…….有
nm个度为m的结点,则该树中叶结点的的个数=______________. n2+2n3+…+(m-1)nm+1
program t1;
var n:integer;
function count(n:integer):integer;
begin
if n=1 then count:=0 else
if n mod 2=0 then count:=count(n div 2)+1 else
count:=count(n*3+1)+1;
end;
begin
readln(n);
writeln(count(n));
end.
输入:99 输出: 25
2.program t2;
var hi,lo:integer;
procedure pl(m,n:integer;var hi,lo:integer);
var I:integer;
begin
I:=n;hi:=0;lo:=0;
Repeat
I:=I-1;lo:=lo+m;
If lo>=10000 then
begin
Lo:=lo-10000;
Hi:=hi+1;
End;
Until I=0;
Write(hi:4,’, ‘,lo:4);
End;
Begin
P1(200,343,hi,lo);
End.
输出: 6.8600
3.program t3;
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(4+(15-X)*(15-X));
if (d1+d2) < Min then Min:=d1+d2;
X:=x+0.001;
end;
writeln(Min:10:2);
end.
输出:13.00
4.program t4;
var i,k,n:integer;
x,w:array[1..500] of integer;
begin
readln(n);
for i:=1 to n do
begin
x[i]:=0;w[i]:=1;
end;
for i:=2 to trunc(sqrt(n))+1 do
if x[i]=0 then
begin
k:=i*i;
while K<=n do
begin
x[k]:=i;
k:=k+i;
end;
end;
for i:=n downto 1 do
if x[i]<>0 then
begin
w[x[i]]:=w[x[i]]+w[i];
w[i div x[i]]:=w[i div x[i]]+w[i];
w[i]:=0;
end;
writeln(w[2],w[3]:5,w[5]:5);
end.
输入:20 输出: 18 8 4
降序组合.给定两个自然数n,r(n>r),输出从数1 到n中按降序顺序取r个自然数的所有
组合.例如,n=5,r=3时,有如下组合:
5 4 3
5 4 2
5 4 1
5 3 2
5 3 1
5 2 1
4 3 2
4 3 1
4 2 1
3 2 1
程序如下:
program tk1;
var n,r,i,j:integer;
a:array[1..20] of integer;
begin
write('n,r=');
repeat
readln(n,r);
until n>r;
i:=1;a[1]:=n;writeln('result:');
repeat
if i<>r then
if a[i]>r-i then
begin
___(1)___;i:=i+1;
end
else begin
___(2)___;
a[I]:=a[I]-1 end
else
begin
for j:=1 to r do write(a[j]:3);
writeln;
if a[r]=1 then
begin
i:=i-1; a[i]:=a[i]-1;
end else ___(3)___
end;
until a[1]=r-1;
end.
1.a[i+1]:=a[i]-1
2. i:=i-1;
3. a[i]:=a[i]-1或a[r]:=a[r]-1;
2. 现在政府计划在某个区域内的的城市间架设高速公路,以使任意两个城市间能够直接或
间接到达,怎样修路,费用最小。
输入文件:第一行一个整数 n(n<=100)表示城市数目。
第二行至第n+1行每行两个数xi,yi(0<=xi,yi<=100)表示第i个城市的坐标(单位:千米);
输出最小费用(每千米一个单位价格)。
程序如下:
program t6;
const maxn=100;
type tcity=record
x,y:real
end;
var c:array[1..maxn] of tcity;
d:array[1..maxn,1..maxn] of real;
p:array[1..maxn] of integer;
n,i,j,k:integer;
a,min:real;
begin
readln(n);
for i:=1 to n do readln(c[i].x,c[i].y);
for i:=1 to n do
for j:=1 to n do
d[i,j]:=sqrt(sqr(c[i].x-c[j].x)+sqr(c[i].y-c[j].y));
p[1]:=0;
for i:=2 to n do ___(4)___
for i:=1 to n-1 do
begin
min:=1e10;
for j:=1 to n do
if ___(5)___ then
begin
min:=d[p[j],j];
___(6)___
end;
a:=a+d[p[k],k];
p[k]:=0;
for j:=1 to n do
if ___(7)___ then p[j]:=k;
end;
writeln(a:0:2);
end.
4. p[i]:=1;
5. (p[j]>0) and (d[p[j],j]) < min)
6. k:=j;
参考资料:无敌复习资料。。共享~
参考技术B NOI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛分区联赛初赛试题(初中组) 竞赛用时:2小时
一、基础题:
<1> 执行①C>DIR 命令后,屏幕上显示如下画面:
FORMAT COM 12145
SYS COM 4878
PUC BAT 126
XCOPY EXE 11216
4 FILE(S) 123456 bytes free
接着又顺序执行了如下几条DOS 命令:
② C>DIR> DF.TXT //表示将列表显示的目录作为文件写盘 //
① C>TYPE DF.TXT
② C>DIR
试问:执行命令③和④ 在屏幕上显示的结果是否与①相同?
<2> 请将以下程序段表示的计算公式写出来(假设X的值已给出)
E:=1 ;
A:=1 ;
FOR N:=1 TO 10 DO
A:=A*X/N ;
E:=E+A ;
ENDFOR ;
写出所表示的公式。
<3> 列举一个算法,使算法的解能对应相应的问题。
例如,设问题为:学生答题,答对一题可得10分,答错一题则要扣去5分,输入答对的题数(M)与答错的题数(N),求最后得分(S)是多少?
列举出相应算法为:
X:=10;
Y:=5;
READ(M,N);
S:=X*M-Y*N;
现有以下问题:用五角钱换成5分、2分与1分的硬币,可有多少种换法?
请列出该问题的算法。
<4> 已知如下N*(N+1)/2个数据,按行的顺序存入数组A[1],A[2],……中:
a11
a21 a22
a31 a32 a33
……
an1 an2 an3 …… ann
其中:第一个下标表示行 第二个下标表示列。
若:aij(i≥j,j,i=1,2,……n)存贮在A[k]中,试问:
(1) k和i,j之间的关系如何表示?
(2) 给定k值(k≤n*(n+1)/2)后,写出能决定相应的i,j值的算法。
<5> 有红、黄、黑、白四色球各一个,放置在一个内存编号为1、2、3、4四个格子的盒中,每个格子放置一只球,它们的顺序不知。甲、乙、丙三人猜测放置顺序如下:
甲:黑编号1,黄编号2;
乙:黑编号2,白编号3;
丙:红编号2,白编号4 。
结果证明甲乙丙三人各猜中了一半。
写出四色球在盒子中放置情况及推理过程。
二、根据根据题目要求,补充完善以下伪代码程序:
<1> 求出所有满足下列条件的二位数:将此二位数的个位数字与十位数字进行交换,可得到一个新的数,要求新数与原数之和小于100。
程序要求:每行输出6个满足条件的数。
[算法提要] 分解每一个二位数,然后重新组成一个新数,当满足条件时,用计数器来统计个数。
程序: K := 0;
FOR i := ______①____ TO 99 DO
X := _____②_____; Y := _____③_____;
J := x * 10 + y;
IF ____④_____ THEN
K := k + 1;
Write(I : 4);
______⑤_____ THEN WRITELN;
ENDIF
ENDFOR;
<2> 找出小于33的6个正整数,用这些整数进行加法运算,使得包括原来的整数在内能组成尽可能多的不同整数。
例如:用2,3,5这三个数能可组成下面的数
2, 3, 5
2 + 3 = 5, 但5已经存在
2 + 5 = 7, 3 + 5 = 8, 2 + 3 + 5 = 10
所以用2,3,5能组成6个不同的数。
程序要求:输出所选的这6个数,以及能组成不同整数的个数。
[算法提要]:选择的这6个数,用来组成数时应该尽可能不重复,引入数组A保存找出的这6个整数。
程序: A[1] := 1; t := 0;
For i := 2 to 6 do
_____①____;
for j := 1 to i - 1 do
s := ______②_______;
ENDFOR;
a[i] := _______③_______;
ENDFOR;
FOR i:=1 TO 6 DO
T := ______④______ WRITE(a[i], ' ');
ENDFOR;
Writeln('能组成不同整数的个数:', t)
End.
<3> 求出2~1000之间长度最长的、成等差数列的素数(质数)。
例如:在2~50之间的全部素数有
2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47
其中公差为1的素数数列为2, 3,其长度为2
公差为2的素数数列为3, 5, 7,其长度为3
……
程序要求:输出满足条件的素数数列。
[算法提要]:首先用筛选法求出此范围内的全部素数,存放在数组B中,然后用2个变量i,j,逐步求出满足条件的素数数列。
程序: Max := 0; num := 1000;
For i := 2 to num do
b[i] := i;
ENDFOR
For i := 2 to ______①______ do
If _____②_____ then
k := i + i;
While k <= num do
B[k] := 0;
K := k + i
ENDWHILE;
ENDIF;
ENDFOR;
For i := 2 to num - 1 do
If _______③_________ then
J := 1;
D[j] := b[i];
For i1 := _________④____________ do
If b[i1] <> 0 then
Delta := _______⑤_______;
k := delta;
While (i+k<=num)and _____⑥______ do
j := j + 1;
d[j] := i + k;
k := k + delta
ENDWHILE;
If j > max then begin
Max := j;
C :=d //数组D的每个元素值
分别送放数组C的相应
元素中去//
ENDIF;
J := 1
ENDIF;
ENDFOR;
ENDIF;
ENDFOR;
writeln('The max length is: ', max);
write('The string is: ');
for i := 1 to max do write(c[i],' ');
writeln
ENDFOR;
<4> 求出二个整形数组错位相加的最大面积。
1.数组面积的定义:(限定数组头尾不为0)
设有一个数组C=(4,8,12,0,6)
则C的面积为:
Sc=(4+8)/2 + (8+12)/2 + 12/2 + 6/2
也就是说,Sc=各梯形面积之和(其中梯
形的高约定为1,三角形作为梯形的特殊情况
处理)。
又如D=(12, 24, 6)时,其面积的定义为Sd=(12+24)/2 + (24+6)/2
2.数组错位相加的定义
设有2个正整数的数组a,b,长度为n,当n=5时:
a=(34,26,15,44,12) b=(23,46,4,0,18)
对a、b进行错位相加,可能有下列情况
34 26 15 44 12
+) 23 46 4 0 18
34 26 15 44 12 23 46 4 0 18
或:
34 26 15 44 12
+) 23 46 4 0 18 -
34 26 15 44 35 46 4 0 18
或:
34 26 15 44 12
+) 23 46 4 0 18
34 26 15 67 58 4 0 18
或:……
最后有:
34 26 15 44 12
+) 23 46 4 0 18 -
23 46 4 0 18 34 26 15 44 12
可以看到:由于错位不同,相加的结果也不同。
程序要求:找出一个错位相加的方案,使得输出的数组面积为最大。
[算法提要]: 设a,b的长度为10,用a,b: array[1..10] of integer表示,其结果用数组C,D: array[1..30] of integer表示。
错位相加的过程可以从开始不重叠,然后逐步重叠,再到最后的不重叠。
梯形面积的计算公式为:(上底+下底)×高÷2
其中由于约定高为1,故可写为(上底+下底)÷2。
程序: n = 10;
…… Function sea : real; 计算数组C面积
Begin
J1 := 1;
While _______①______ do
j1 := j1 + 1;
ENDWHILE;
If j1 = 3 * n then sea := 0
Else begin
J2 := 3 * n;
While _______②______ do
j2 := j2 - 1;
If j1 = j2 then sea := 0
Else begin
J3 := c[j1] + c[j2];
For j4 := j1 + 1 to j2 - 1 do
INC(j3,c[j4]*2);
ENDFOR;
Sea := j3 / 2
end
ENDIF;
End;
//主程序//
For i := 1 to n do read(a[I]); endfor;
For j := 1 to n do read(b[j]); endfor;
__________③____________;
for i := 1 to 2 * n + 1 do
for j := 1 to 3 * n do ________④__________ endfor;
for j := 1 to n do c[j + n] := a[j] endfor;
for j := 1 to n do
_________⑤__________;
endfor;
p := sea;
if p > s then begin
d := c;
s := p
end;
endif;
endfor;
for I := 1 to 3 * n do write(d[I],' '); endfor;
write(s);
End. //主程序结束// 参考技术C 历届题库
(noip1995-2006)
完整版
提高组
普及组
答案
一应俱全
把你的邮箱贴出来,我发给你本回答被提问者采纳 参考技术D 我发你邮箱 有很多
zhaowei897639498@sina.com
急求NOIP2009普及组试题
参考技术A NOIP2009普及组复赛试题1.多项式输出
(poly.pas/c/cpp)
【问题描述】
一元 n 次多项式可用如下的表达式表示:
1 0
1
1 f (x) a x a xn ... a x a
n
n
n = + ? + + +
? , ≠ 0 n a
其中,
i
i a x 称为i 次项, i a 称为i 次项的系数。给出一个一元多项式各项的次数和系
数,请按照如下规定的格式要求输出该多项式:
1. 多项式中自变量为x,从左到右按照次数递减顺序给出多项式。
2. 多项式中只包含系数不为0 的项。
3. 如果多项式n 次项系数为正,则多项式开头不出现“+”号,如果多项式n 次项系
数为负,则多项式以“-”号开头。
4. 对于不是最高次的项,以“+”号或者“-”号连接此项与前一项,分别表示此项
系数为正或者系数为负。紧跟一个正整数,表示此项系数的绝对值(如果一个高于0 次的项,
其系数的绝对值为1,则无需输出1)。如果x 的指数大于1,则接下来紧跟的指数部分的形
式为“x^b”,其中b 为x 的指数;如果x 的指数为1,则接下来紧跟的指数部分形式为“x”;
如果x 的指数为0,则仅需输出系数即可。
5. 多项式中,多项式的开头、结尾不含多余的空格。
【输入】
输入文件名为 poly.in,共有2 行
第一行 1 个整数,n,表示一元多项式的次数。
第二行有 n+1 个整数,其中第i 个整数表示第n-i+1 次项的系数,每两个整数之间用空
格隔开。
【输出】
输出文件 poly.out 共1 行,按题目所述格式输出多项式。
【输入输出样例 1】
poly.in poly.out
5
100 -1 1 -3 0 10
100x^5-x^4+x^3-3x^2+10
【输入输出样例2】
poly.in poly.out
3
-50 0 0 1
-50x^3+1
【数据范围】
1 ≤ n ≤ 100,多项式各次项系数的绝对值均不超过100。
全国信息学奥林匹克联赛(NOIP2009)复赛普及组
第 3 页共 6 页
2.分数线划定
(score.pas/c/cpp)
【问题描述】
世博会志愿者的选拔工作正在 A 市如火如荼的进行。为了选拔最合适的人才,A 市对
所有报名的选手进行了笔试,笔试分数达到面试分数线的选手方可进入面试。面试分数线根
据计划录取人数的150%划定,即如果计划录取m名志愿者,则面试分数线为排名第m*150%
(向下取整)名的选手的分数,而最终进入面试的选手为笔试成绩不低于面试分数线的所有
选手。
现在就请你编写程序划定面试分数线,并输出所有进入面试的选手的报名号和笔试成
绩。
【输入】
输入文件名为 score.in。
第一行,两个整数n,m(5 ≤ n ≤ 5000,3 ≤ m ≤ n),中间用一个空格隔开,其
中n 表示报名参加笔试的选手总数,m 表示计划录取的志愿者人数。输入数据保证m*150%
向下取整后小于等于n。
第二行到第 n+1 行,每行包括两个整数,中间用一个空格隔开,分别是选手的报名号k
(1000 ≤ k ≤ 9999)和该选手的笔试成绩s(1 ≤ s ≤ 100)。数据保证选手的报名号各
不相同。
【输出】
输出文件 score.out。
第一行,有两个整数,用一个空格隔开,第一个整数表示面试分数线;第二个整数为
进入面试的选手的实际人数。
从第二行开始,每行包含两个整数,中间用一个空格隔开,分别表示进入面试的选手
的报名号和笔试成绩,按照笔试成绩从高到低输出,如果成绩相同,则按报名号由小到大的
顺序输出。
【输入输出样例】
score.in score.out
6 3
1000 90
3239 88
2390 95
7231 84
1005 95
1001 88
88 5
1005 95
2390 95
1000 90
1001 88
3239 88
【样例说明】
m*150% = 3*150% = 4.5,向下取整后为4。保证4 个人进入面试的分数线为88,但因为88
有重分,所以所有成绩大于等于88 的选手都可以进入面试,故最终有5 个人进入面试。
全国信息学奥林匹克联赛(NOIP2009)复赛普及组
第 4 页共 6 页
3.细胞分裂
(cell.pas/c/cpp)
【问题描述】
Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家。现在,他正在为一个细胞实
验做准备工作:培养细胞样本。
Hanks 博士手里现在有N 种细胞,编号从1~N,一个第i 种细胞经过1 秒钟可以分裂为
Si 个同种细胞(Si 为正整数)。现在他需要选取某种细胞的一个放进培养皿,让其自由分裂,
进行培养。一段时间以后,再把培养皿中的所有细胞平均分入M 个试管,形成M 份样本,
用于实验。Hanks 博士的试管数M 很大,普通的计算机的基本数据类型无法存储这样大的
M 值,但万幸的是,M 总可以表示为m1 的m2 次方,即2
1
M = m m ,其中m1,m2 均为基本
数据类型可以存储的正整数。
注意,整个实验过程中不允许分割单个细胞,比如某个时刻若培养皿中有4 个细胞,
Hanks 博士可以把它们分入2 个试管,每试管内2 个,然后开始实验。但如果培养皿中有5
个细胞,博士就无法将它们均分入2 个试管。此时,博士就只能等待一段时间,让细胞们继
续分裂,使得其个数可以均分,或是干脆改换另一种细胞培养。
为了能让实验尽早开始,Hanks 博士在选定一种细胞开始培养后,总是在得到的细胞“刚
好可以平均分入M 个试管”时停止细胞培养并开始实验。现在博士希望知道,选择哪种细
胞培养,可以使得实验的开始时间最早。
【输入】
输入文件名为 cell.in,共有三行。
第一行有一个正整数 N,代表细胞种数。
第二行有两个正整数 m1,m2,以一个空格隔开, 2
1
m m 即表示试管的总数M。
第三行有 N 个正整数,第i 个数Si 表示第i 种细胞经过1 秒钟可以分裂成同种细胞的个
数。
【输出】
输出文件 cell.out 共一行,为一个整数,表示从开始培养细胞到实验能够开始所经过的
最少时间(单位为秒)。
如果无论 Hanks 博士选择哪种细胞都不能满足要求,则输出整数-1。
【输入输出样例 1】
cell.in cell.out
1
2 1
3
-1
【输入输出样例1 说明】
经过 1 秒钟,细胞分裂成3 个,经过2 秒钟,细胞分裂成9 个,……,可以看出无论怎么分
裂,细胞的个数都是奇数,因此永远不能分入2 个试管。
全国信息学奥林匹克联赛(NOIP2009)复赛普及组
第 5 页共 6 页
【输入输出样例 2】
cell.in cell.out
2
24 1
30 12
2
【输入输出样例2 说明】
第 1 种细胞最早在3 秒后才能均分入24 个试管,而第2 种最早在2 秒后就可以均分(每
试管144/(241)=6 个)。故实验最早可以在2 秒后开始。
【数据范围】
对于 50%的数据,有2
1
m m ≤ 30000。
对于所有的数据,有1 ≤N≤ 10000,1 ≤m1 ≤ 30000,1 ≤m2 ≤ 10000,1 ≤ Si ≤ 2,000,000,000。
4.道路游戏
(game.pas/c/cpp)
【问题描述】
小新正在玩一个简单的电脑游戏。
游戏中有一条环形马路,马路上有n 个机器人工厂,两个相邻机器人工厂之间由一小段
马路连接。小新以某个机器人工厂为起点,按顺时针顺序依次将这n 个机器人工厂编号为
1~n,因为马路是环形的,所以第n 个机器人工厂和第1 个机器人工厂是由一段马路连接在
一起的。小新将连接机器人工厂的这n 段马路也编号为1~n,并规定第i 段马路连接第i 个
机器人工厂和第i+1 个机器人工厂(1 ≤ i ≤ n-1),第n 段马路连接第n 个机器人工厂和第1
个机器人工厂。
游戏过程中,每个单位时间内,每段马路上都会出现一些金币,金币的数量会随着时间
发生变化,即不同单位时间内同一段马路上出现的金币数量可能是不同的。小新需要机器人
的帮助才能收集到马路上的金币。所需的机器人必须在机器人工厂用一些金币来购买,机器
人一旦被购买,便会沿着环形马路按顺时针方向一直行走,在每个单位时间内行走一次,即
从当前所在的机器人工厂到达相邻的下一个机器人工厂,并将经过的马路上的所有金币收集
给小新,例如,小新在i(1 ≤ i ≤ n)号机器人工厂购买了一个机器人,这个机器人会从i 号
机器人工厂开始,顺时针在马路上行走,第一次行走会经过i 号马路,到达i+1 号机器人工
厂(如果i=n,机器人会到达第1 个机器人工厂),并将i 号马路上的所有金币收集给小新。
游戏中,环形马路上不能同时存在2 个或者2 个以上的机器人,并且每个机器人最多能
够在环形马路上行走p 次。小新购买机器人的同时,需要给这个机器人设定行走次数,行走
次数可以为1~p 之间的任意整数。当马路上的机器人行走完规定的次数之后会自动消失,小
新必须立刻在任意一个机器人工厂中购买一个新的机器人,并给新的机器人设定新的行走次
数。
以下是游戏的一些补充说明:
1. 游戏从小新第一次购买机器人开始计时。
2. 购买机器人和设定机器人的行走次数是瞬间完成的,不需要花费时间。
3. 购买机器人和机器人行走是两个独立的过程,机器人行走时不能购买机器人,购买
完机器人并且设定机器人行走次数之后机器人才能行走。
4. 在同一个机器人工厂购买机器人的花费是相同的,但是在不同机器人工厂购买机器
人的花费不一定相同。
5. 购买机器人花费的金币,在游戏结束时再从小新收集的金币中扣除,所以在游戏过
程中小新不用担心因金币不足,无法购买机器人而导致游戏无法进行。也因为如此,
游戏结束后,收集的金币数量可能为负。
现在已知每段马路上每个单位时间内出现的金币数量和在每个机器人工厂购买机器人
需要的花费,请你告诉小新,经过m 个单位时间后,扣除购买机器人的花费,小新最多能
收集到多少金币。
【输入】
输入文件名为 game.in。
第一行 3 个正整数,n,m,p,意义如题目所述。
接下来的 n 行,每行有m 个正整数,每两个整数之间用一个空格隔开,其中第i 行描
述了i 号马路上每个单位时间内出现的金币数量(1 ≤ 金币数量≤ 100),即第i 行的第j
(1 ≤ j ≤m)个数表示第j 个单位时间内i 号马路上出现的金币数量。
最后一行,有 n 个整数,每两个整数之间用一个空格隔开,其中第i 个数表示在i 号机
器人工厂购买机器人需要花费的金币数量(1 ≤ 金币数量≤ 100)。
【输出】
输出文件 game.out 共一行,包含1 个整数,表示在m 个单位时间内,扣除购买机器人
花费的金币之后,小新最多能收集到多少金币。
【输入输出样例】
game.in game.out
2 3 2
1 2 3
2 3 4
1 2
5
【数据范围】
对于 40%的数据,2 ≤ n ≤ 40,1 ≤m≤ 40。
对于 90%的数据,2 ≤ n ≤ 200,1 ≤m≤ 200。
对于 100%的数据,2 ≤ n ≤ 1000,1 ≤m≤ 1000,1 ≤ p ≤m
以上是关于急求pascal初中普及组资料的主要内容,如果未能解决你的问题,请参考以下文章