NOIP2008提高组复赛试题及题解
NOIP2008信息奥赛提高组试题与答案
NOIP2008信息奥赛提高组试题与答案(Pascal语言)
第14届信息学奥赛试题
单项选择
1. 在以下各项中,()不是操作系统软件。
A.Solaris B.Linux C.Sybase D.Windows Vista E.Symbian
2. 微型计算机中,控制器的基本功能是()。
A. 控制机器的各个部件协调工作
B.实现算数运算与逻辑运算
C.存储各种控制信息
D. 获取外部信息
E.存放程序和数据
3. 设字符串S=“Olympic”,S的非空字串的数目是()。
A.29
B.28
C.16
D.17
E.7
4. 完全2叉树有2*N-1的结点,则它的叶子结点数目是()。
A.N-1
B.2*N
C.N
D.2^N-1
E.N/2
5. 将数组{8,23,4,16,77,-5,53,100}中元素从大到小按顺序排序,每次可以交换任意两个元素,最少要交换()次。
A.4
B.5
C.6
D.7
E.8
6.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈,出栈顺序为b,d,c,f,e,a那么栈容量至少该是()
A.6
B.5
C.4
D.3
E.2
7.与十进制数28.5625相等的四进制数是()
A.123.21
B.131.22
C.130.22
D.130.21
E.130.20
8.递归过程和函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。
A.队列
B.多维数组
C.线性表
D.链表
E.栈
9.TCP/IP 是一组构成互联网基础的网络协议,字面上包括两组协议:传输控制协议(TCP)和网际互联协议(IP)。TCP/IP协议把Internet网络系统描述成具有4个层次功能的网络模型,其中提供源节点和目的节点之间的信息传输服务,包括寻址和路由器选择等功能的是()。
NOIP初赛试题提高组C语言
2.已知 a, b, c, d, e, f, g 七个人中, a 会讲英语; b 会讲英语和汉语; c 会讲英语、意大利语和俄语; d 会讲汉语和日语; e 会讲意大利语和德语; f 会讲俄语、日语和法语; g 会讲德语和法语。能否将他们的座位安排在圆桌旁,使得每个人都能与他身边的人交谈?如果可以,请以“ a b ”开头写出你的安排方案: 。
.
答: a b d f g e c
第十一届(2005)
a-b-d-f
c-e-g-f g-e-c-f
第十二届(2006)
三.问题求解(共 2 题,每题 5 分,共计10 分)
1.将2006 个人分成若干不相交的子集,每个子集至少有3 个人,并且:
(1)在每个子集中,没有人认识该子集的所有人。
(2)同一子集的任何 3 个人中,至少有2 个人互不认识。
(3)对同一子集中任何 2 个不相识的人,在该子集中恰好只有 1 个人认识这两个人。则满足上述条件的子集最多能有___________个?
分析:要使子集数最多,每一子集的人数应最少。每一子集的人数为3,不符合要求,为4也不符合要求,为5可符合要求。
2.将边长为n 的正三角形每边n 等分,过每个分点分别做另外两边的平行线,得到若干个正三角形,我们称为小三角形。正三角形的一条通路是一条连续的折线,起点是最上面的一个小三角形,终点是最下面一行位于中间的小三角形。在通路中,只允许由一个小三角形走到另一个与其有公共边的且位于同一行或下一行的小三角形,并且每个小三角形不能经过两次或两次以上(图中是n=5 时一条通路的例子)。设n=10,则该正三角形的不同的通路的总数为_____________。
NOIP2008普及组复赛试题(附题解)
全国信息学奥林匹克联赛NOIP2008复赛
普及组
注意事项:
1、文件名(程序名和输入输出文件名)必须使用小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。
各省在自测时可根据具体配置调整时限。
1.ISBN号码
(isbn.pas/c/cpp)
【问题描述】
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,…,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
NOIP2008提高组复赛题解-文档资料
long ans; short n;
void Input(); int Matches(int x); void Search(); void Output(); int main() { Input(); Search(); Output(); } void Input() { ifstream fin(I_F); fin>>n; fin.close(); }
int main()Байду номын сангаас{ Input(); Search(); Output(); return 0; } void Input() { ifstream fin(I_F); fin>>s; fin.close(); }
void Search() //统计字母出现次数 { short i, max=0, min=200; short f[26]={0}; for (i=0; i<s.length(); f[s[i++]-'a']++); for (i=0; i<26; i++) if (f[i]>0) { if (f[i]>max) max=f[i]; if (f[i]<min) min=f[i]; } ans=max-min; }
输入格式:
输入文件word.in只有一行,是一个单词,其中只可 能出现小写字母,并且长度小于100。 *输出格式: 输出文件word.out共两行,第一行是一个字符串, 假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”; 第二行是一个整数, 如果输入单词是Lucky Word,输出maxn-minn的值,否则 输出0。
1995-2008复赛试题及解析
NOIP1995年复赛试题
1. 设有下列的算式:求出□中的数字,并打印出完整的算式来。 8 0 9 ------------- □□) □□□□ □□
------------- □□□ □□□ ------------- 1
2. 方阵填数:在一个N ⨯N 的方阵中,填入1,2,……N ⨯N 个数,并要求构成如下的格式: 例:
3. 若将一个正整数化为二进制数,在此二进制数中,我们将数字1的个数多于数字0的个数的这类二进
制数称为A 类数,否则就称其为B 类数。
例如:(13)10=(1101)2 其中1的个数为3,0的个数为1,则称此数为A 类数; (10)10=(1010)2 其中1的个数为2,0的个数也为2,称此数为B 类数; (24)10=(11000)2 其中1的个数为2,0的个数为3,则称此数为B 类数; 程序要求:求出1~1000之中(包括1与1000),全部A 、B 两类数的个数。
4.编码问题:设有一个数组A:ARRAY[0..N-1] OF INTEGER ;数组中存放的元素为0~N-1之间的整数,且A[i]≠A[j](当i ≠j 时)。
例如:N=6时,有: A=(4,3,0,5,1,2) 此时,数组A 的编码定义如下: A[0]的编码为0;
A[i]的编码为:在A[0],A[1],……A[i-1]中比A[i]的值小的个数(i=1,2……N-1) ∴上面数组A 的编码为:
B=(0,0,0,3,1,2)
程序要求解决以下问题:给出数组A 后,求出其编码;给出数组A 的编码后,求出A 中的原数据。 5. 灯的排列问题:设在一排上有N 个格子(N ≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N 1,N 2,……N k (k 表示不同颜色灯的个数)。
【noip2008年提高组题二】火柴棒等式
【noip2008年提高组题二】火柴棒等式
问题描述:
在火柴棒等式中,每个数字由若干火柴棒组成,要求组成一个等式。等式中有加号、等号和两个数字,它们之间各自由若干火柴棒连接起来。若干数字的顺序和下标之和相等,则等式成立。
已知通过7根火柴棒可以得到的合法的等式有12个,求合法
的所有等式。
解题思路:
本题为全排列问题的一个典型应用。根据题目给出的火柴棒等式的要求,遍历所有的7根火柴棒的全排列,验证是否能组成合法的火柴棒等式,并将符合条件的等式输出即可。以下为详细步骤:
1. 构建火柴棒数量列表,用于表示每个数字所需的火柴棒数量。列表的下标表示数字,列表的值表示火柴棒数量;
2. 生成7根火柴棒的全排列,并将每一个排列结果作为一个可能的等式;
3. 遍历所有可能的等式,判断是否符合题目要求:等式中有加号、等号和两个数字,它们之间各自由若干火柴棒连接起来。若干数字的顺序和下标之和相等,则等式成立;
4. 将符合条件的等式输出。
以下为Python代码实现:
def dfs(total, cur):
if cur == 7:
judge(total)
return
for i in range(10):
if num[i] > 0:
num[i] -= 1
dfs(total + ch[cur][i], cur + 1)
num[i] += 1
def judge(total):
for i in range(10):
if num[i] != 0:
return
a, b, c = total[0], total[1], total[2]
NOIP2008普及组复赛解题报告
NOIP2008普及组复赛解题报告
一、ISBN号码
基础字符串处理题,心细一点的基本都能得满分。参考程序:
program isbn;
const
inp='isbn.in';
oup='isbn.out';
var
i,j,k,ans:longint;
s:string;
ch:char;
procedure flink;
begin
assign(input,inp);
reset(input);
assign(output,oup);
rewrite(output);
end;
procedure fclose;
begin
close(input);
close(output);
end;
begin
flink;
readln(s);// 输入字符串
j:=0;
i:=1;
ans:=0;
while j<9 do
begin
if s[i] in ['0'..'9'] then//如果是数字,那么累加到ans中,共9个数字
begin
inc(j);
inc(ans,(ord(s[i])-ord('0'))*j);
end;
inc(i);
end;
ans:=ans mod 11;计算识别码
if ans=10 then ch:='X' else ch:=chr(ord('0')+ans);//把识别码转换成字符,方便输出
if s[length(s)]=ch
then write('Right')
else write(copy(s,1,12)+ch);//输出正确的识别码
fclose;
end.
二、排座椅
用的是赛前集训时提到的贪心,当时说某些题目用贪心可以得部分分,但是本题贪心可以得满分的。
2008年noip提高组复赛题解
2015/11/25
北京12中庄燕文
这道题的错误做法很多,错误做法却能得满分的也很多, 这里就不多说了.直接切入正题,就是即将介绍的这个基 于二分图的算法. 注意到并没有说基于二分 图匹配,因为这个算法和二分图匹配无关.这个算法只是 用到了给一个图着色成二分图. 第一步需要解决的问题是,判断是否有解. 考虑对于任意两个数q1[i]和q1[j]来说,它们不能压入同 一个栈中的充要条件是什么(注意没有必要使它们同时 存在于同一个栈中,只是压入了同一个栈).实际上,这个 条件p是:存在一个k,使得i<j<k且q1[k]<q1[i]<q1[j].
2015/11/25 北京12中庄燕文
首先证明充分性,即如果满足条件p,那么这两个数一定不能压入同一 个栈.这个结论很显然,使用反证法可证. 假设这两个数压入了同一个栈,那么在压入q1[k]的时候栈内情况如 下:…q1[i]…q1[j]… 因为q1[k]比q1[i]和q1[j]都小,所以很显然,当q1[k]没有被弹出的时候, 另外两个数也都不能被弹出(否则q2中的数字顺序就不是1,2,3,…,n 了). 而之后,无论其它的数字在什么时候被弹出,q1[j]总是会在q1[i]之前弹 出.而q1[j]>q1[i],这显然是不正确的.
参考程序
2015/11/25
北京12中庄燕文
第三题 message 题意简述: 给一个矩阵(左上角和右下角固定为0),从左 上角走两次到右下角,两次走的路径不能有交集(即一 个点不能被走两次),求两次走过的格子上的数的和最 大是多少.(类似二取方格数.) 解题思路: 二取方格数很经典的题目了,于是便直接以 f[i][j][k][p] 表示第一条路径走到(i,j),第二条路径走到 (k,p)所取到的数的最大值..转移方程就很好办了..同时 注意判断两条路不要从同一个点转移过来就好了.
1995-2008 历届NOIP试题及详解
OI’95 “同创杯”全国青少年信息学(计算机)奥林匹克竞赛
分区联赛复赛试题(初中组)
(上机编程,完成时间:210 分钟)
<1> 设有下列的算式:
809
------------□□) □□□□
□□
------------□□□
输出: A=(3,2,1,0,4,5,6)
<5> 本题共 30 分(10%+10%+10%)
① 数据输入: N=6
P1=R
N1=1
Q
排列方案: R ② 排数列据总输数入=:6 N=6 R
P1=R
NR1=2
P2=Y
N2=1 R
Q
R
排列方案: R ③ 排数列据总输数入=:12N=1R2
P1=RR
R
Y
R R N1= 3
BBB
RR
N
P1(颜色,为一个字母) N1(灯的数量)
P2
N2
……
Q(结束标记,Q 本身不是灯的颜色)
程序要求:求出一种顺序的排列方案及排列总数。
<3> 设有一个四层的积木块,1~4 层积木块的数量依次为:5,6,7,8
如下图所示放置:
8 15 8 5 16 9 14
noip2008普及组复赛试题(附题解)
全国信息学奥林匹克联赛(NOIP2008)复赛
普及组
注意事项:
1、文件名(程序名和输入输出文件名)必须使用小写。
2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3、全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。
各省在自测时可根据具体配置调整时限。
1.ISBN号码
(isbn.pas/c/cpp)
【问题描述】
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分隔之后的五位数字代表该书在出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2......以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写字母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2, (9)
再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出你认为是正确的ISBN号码。
NOIP2008第十四届全国青少年信息学奥林匹克联赛初赛试题(含答案)汇总
2008第十四届全国青少年信息学奥林匹克联赛初赛试题(提高组 C 语言二小时完成)
●● 全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一、单项选择题(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案)。
1. 在以下各项中,()不是操作系统软件。
Symbian
2.微型计算机中,控制器的基本功能是()。
A. 控制机器各个部件协调工作
B. 实现算术运算和逻辑运算
C. 存储各种控制信息
D. 获取外部信息
3. 设字符串S=”Olympic”,S的非空子串的数目是()。
A. 29
B. 28
C. 16
D. 17
E. 7
4.完全二叉树共有2*N-1个结点,则它的叶节点数是()。
A. N-1
B. 2*N
C. N
D. 2N-1
E. N/2
5.将数组{8, 23, 4, 16, 77, -5, 53, 100}中的元素按从大到小的顺序排列,每次可以交换任意两个元素,最少需要交换()次。
A. 4
B. 5
C. 6
D. 7
E. 8
6.设栈S的初始状态为空,元素a,b,c,d,e,f依次入栈S,出栈的序列为b,d,c,f,e,a,则栈S的容量至少应该是()。
A. 6
B. 5
C. 4
D. 3
E. 2
7. 与十进制数28.5625相等的四进制数是()。
A. 123.21
B. 131.22
C. 130.22
D. 130.21
E. 130.20
8.递归过程或函数调用时,处理参数和返回地址,通常使用一种称为()的数据结构。
A. 队列
B. 多维数组
C. 线性表
D. 链表
E. 栈
1 A. Solaris B. Linux C. Sybase D. Windows Vista E. E. 存放程序和数据
NOIP2008提高组前三题解题报告
NOIP2008提高组前三题解题报告
[日期:2008-11-18] 来源:作者:张恩权[字体:大中小]
NOIP2008提高组前三题解题报告
1.笨小猴
基本的字符串处理,细心一点应该没问题的,不过判断素数时似乎需要考虑下0和1的情况。参考程序:
program word;
const
inp='word.in';
oup='word.out';
var
i,j,k,min,max:longint;
s:string;
ch:char;
f:array['a'..'z'] of integer;//记录每个字符出现的次数
procedure flink;
begin
assign(input,inp);
reset(input);
assign(output,oup);
rewrite(output);
end;
procedure fclose;
begin
close(input);
close(output);
end;
function judge(k:longint):boolean;//判断素数,需考虑0和1的情况
var
i:longint;
begin
if (k=0) or (k=1) then exit(false);
for i:=2 to trunc(sqrt(k)) do
if k mod i = 0 then exit(false);
exit(true);
end;
begin
flink;
readln(s);
fillchar(f,sizeof(f),0);
for i:= 1 to length(s) do //统计每个字符出现的次数 inc(f[s[i]]);
【noip2008年提高组题二】火柴棒等式
【noip2008年提高组题二】火柴棒等式
题目描述:
给定一个由火柴棒拼成的数字等式,例如:"3-2+1=4",要求你判断这个等式是否成立。
输入格式:
等式(由数字、加减乘除号组成)。
输出格式:
如果等式成立,输出 "Yes",否则输出 "No"。
数据范围:
等式长度为5-10,且只包含数字0-9,加号、减号、等号。
样例:
输入:3-2+1=4
输出:Yes
解题思路:
这道题可以使用模拟的方法进行求解。首先,我们需要模拟火柴棒的移动过程,判断等式是否成立。具体来说,我们可以从左到右遍历等式,依次判断每个字符代表的火柴棒是否能够移动到正确的位置。如果能够移动到正确的位置,则说明等式成立;否则,说明等式不成立。
具体步骤如下:
1. 初始化一个计数器变量count为0,用于记录当前位置的火柴棒数量。
2. 从左到右遍历等式中的每个字符:
如果当前字符是数字,则将其转换为对应的火柴棒数量,并将其加到count中。
如果当前字符是加号或减号,则将其转换为对应的火柴棒数量,并将其加到count中。同时,还需要判断下一个字符是否为数字,如果是数字,则将其转换为对应的火柴棒数量,并将其加到count中;如果不是数字,
则说明等式不成立,直接返回"No"。
如果当前字符是等号,则判断count是否等于等号右边的火柴棒数量,如果相等则说明等式成立,返回"Yes";否则说明等式不成立,返回"No"。
3. 如果遍历完整个等式后仍然没有返回结果,则说明等式不成立,返回"No"。
代码实现:
以下是Python语言的代码实现:
```python
NOIP2008普及组复赛试题
全国信息学奥林匹克联赛(NOIP2008)复赛
普及组
1.ISBN号码
(isbn.pas/c/cpp)
【问题描述】
每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括9位数字、1位识别码和3位分隔符,其规定格式如“x-xxx-xxxxx-x”,其中符号“-”是分隔符(键盘上的减号),最后一位是识别码,例如0-670-82162-4就是一个标准的ISBN码。ISBN码的首位数字表示书籍的出版语言,例如0代表英语;第一个分隔符“-”之后的三位数字代表出版社,例如670代表维京出版社;第二个分割之后的五位数字代表该书在该出版社的编号;最后一位为识别码。
识别码的计算方法如下:
首位数字乘以1加上次位数字乘以2……以此类推,用所得的结果mod 11,所得的余数即为识别码,如果余数为10,则识别码为大写子母X。例如ISBN号码0-670-82162-4中的识别码4是这样得到的:对067082162这9个数字,从左至右,分别乘以1,2,……,9,再求和,即0×1+6×2+……+2×9=158,然后取158 mod 11的结果4作为识别码。
你的任务是编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输入“Right”;如果错误,则输出你认为是正确的ISBN号码。
【输入】
输入文件isbn.in只有一行,是一个字符序列,表示一本书的ISBN号码(保证输入符合ISBN 号码的格式要求)。
【输出】
输出文件isbn.out共一行,假如输入的ISBN号码的识别号正确,那么输出“Right”,否则,按照规定的格式,输出正确的ISBN号码(包括分隔符“-”)。
第十一届NOIP决赛试题
第十一届NOIP决赛试题
第十一届NOIP初赛试题(提高组C语言)
2008-06-05 21:20:15 来源:巨人科技教育中心作者:佚名 [打印] [评论] 第十一届全国青少年信息学奥林匹克联赛初赛试题
(提高组 C 语言二小时完成)
●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●
一、单项选择题(共10题,每题1.5分,共计15分。每题有且仅有一个正确答案.)。字符串“ababacbab”和字符串“abcba”的最长公共子串是()。
A. abcba
B. cba
C. abc
D. ab
E. bcba
设全集I = {a, b, c, d, e, f, g, h},集合 = {a, b, c, d, e, f}, = {c, d, e}, = {a, d},那么集合为()。
A. {c, e}
B. {d, e}
C. {e}
D. {c, d, e}
E. {d, f}
以下二进制数的值与十进制数23.456的值最接近的是()。
A. 10111.0101
B. 11011.1111
C. 11011.0111
D. 10111.0111
E. 10111.1111
完全二叉树的结点个数为4 * N + 3,则它的叶结点个数为()。
A. 2 * N
B. 2 * N - 1
C. 2 * N + 1
D. 2 * N - 2
E. 2 * N + 2
平面上有五个点A(5, 3), B(3, 5), C(2, 1), D(3, 3), E(5, 1)。以这五点作为完全图G 的顶点,每两点之间的直线距离是图G中对应边的权值。图G的最小生成树中的所有边的权
NOIP历届习题(2000-2008)
2000年全国青少年信息学(计算机)奥林匹克分区联
赛复赛试题
(高中组竞赛用时:3小时)
题一进制转换
问题描述
我们可以用这样的方式来表示一个十进制数:将每个阿拉伯数字乘以一个以该数字所处位置的(值减1)为指数,以10为底数的幂之和的形式。例如:123可表示为1*102+2*101+3*100这样的形式。
与之相似的,对二进制数来说,也可表示成每个二进制数码乘以一个以该数字所处位置的(值-1)为指数,以2为底数的幂之和的形式。一般说来,任何一个正整数R或一个负整数-R都可以被选来作为一个数制系统的基数。如果是以R或-R为基数,则需要用到的数码为0,1,....R-1。例如,当R=7时,所需用到的数码是0,1,2,3,4,5和6,这与其是R或-R无关。如果作为基数的数绝对值超过10,则为了表示这些数码,通常使用英文字母来表示那些大于9的数码。例如对16进制数来说,用A表示10,用B表示11,用C表示12,用D表示13,用E表示14,用F表示15。
在负进制数中是用-R作为基数,例如-15(十进制)相当于110001(-2进制),并且它可以被表示为2的幂级数的和数:
110001=1*(-2)5+1*(-2)4+0*(-2)3+0*(-2)2+0*(-2)1+1*(-2)0
问题求解
设计一个程序,读入一个十进制数和一个负进制数的基数, 并将此十进制数转换为此负进制下的数:-R∈{-2,-3,-4,...,-20}
输入
输入的每行有两个输入数据。
第一个是十进制数N(-32768<=N<=32767);第二个是负进制数的基数-R。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
全国信息学奥林匹克联赛(NOIP2008)复赛
提高组
一、题目概览
二、提交源程序文件名
三、编译命令(不包含任何优化开关)
四、运行内存限制
注意事项:
1. 文件名(程序名和输入输出文件名)必须使用大写。
2. C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。
3. 全国统一评测时采用的机器配置为:CPU 1.9GHz,内存512M,上述时限以此配置为准。各省在自测时可根据具体配置调整时限。
1. 笨小猴
(word.pas/c/cpp)
【问题描述】
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn 是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
【输入】
输入文件word.in只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。【输出】
输出文件word.out共两行,第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
【输入输出样例1】
【输入输出样例1解释】
单词error中出现最多的字母r出现了3次,出现次数最少的字母出现了1次,3-1=2,2是质数。
【输入输出样例2】
【输入输出样例2解释】
单词olympic中出现最多的字母i出现了2次,出现次数最少的字母出现了1次,2-1=1,1不是质数。
基本的字符串处理,细心一点应该没问题的,不过判断素数时似乎需要考虑下0和1的情况。var a:array['a'..'z']of integer;
s:string;
l,i,max,min,n:integer;
ch:char;flag:boolean;
begin
assign(input,'word.in');
reset(input);
assign(output,'word.out');
rewrite(output);
readln(s);
l:=length(s);
fillchar(a,sizeof(a),0);
for i:=1 to l do
inc(a[s[i]]);
max:=0;min:=100;
for ch:='a'to 'z' do
if a[ch]>0 then begin
if a[ch]>max then max:=a[ch];
if a[ch] end; n:=max-min; flag:=true; if(n=0) or (n=1) then flag:=false else for i:=2 to trunc(sqrt(n)) do if n mod i =0 then begin flag:=false;break;end; if flag then begin writeln('Lucky Word'); writeln(n);end else begin writeln('No Answer');writeln(0);end; close(output);close(input); end. 2. 火柴棒等式 (matches.pas/c/cpp) 【问题描述】 给你n根火柴棍,你可以拼出多少个形如“A+B=C”的等式?等式中的A、B、C是用火柴棍拼出的整数(若该数非零,则最高位不能是0)。用火柴棍拼数字0-9的拼法如图所示: 注意: 1. 加号与等号各自需要两根火柴棍 2. 如果A≠B,则A+B=C与B+A=C视为不同的等式(A、B、C>=0) 3. n根火柴棍必须全部用上 【输入】 输入文件matches.in共一行,又一个整数n(n<=24)。 【输出】 输出文件matches.out共一行,表示能拼成的不同等式的数目。 【输入输出样例1】 【输入输出样例1解释】 2个等式为0+1=1和1+0=1。 【输入输出样例2】 【输入输出样例2解释】 9个等式为: 0+4=4 0+11=11 1+10=11 2+2=4 2+7=9 4+0=4 7+2=9 10+1=11 11+0=11 预处理下,然后枚举、剪枝,范围稍微开大点,弄到2000似乎足够了,剪枝后不会超时的。首先预处理下每个数(0~2000)需要多少个火柴棒,然后枚举A和B,再判断。 参考程序1: program matches; const inp='matches.in'; oup='matches.out'; num:array['0'..'9'] of integer=(6,2,5,5,4,5,6,3,7,6);//0~9需要的火柴棒数 maxn=1000; var f:array[0..maxn*2] of longint; i,j,k,n,ans:longint; s:string; procedure flink; begin assign(input,inp); reset(input); assign(output,oup); rewrite(output); end; procedure fclose; begin close(input); close(output); end;