NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛(普及组试题及答案)

NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛(普及组试题及答案)
NOIP(2014)第二十届全国青少年信息学奥林匹克联赛初赛(普及组试题及答案)

第二十届全国青少年信息学奥林匹克联赛初赛

(普及组 Pascal语言二小时完成)

●●全部试题答案均要求写在答卷纸上,写在试卷纸上一律无效●●

一.单项选择题(共20题,每题1.5分,共计30分。每题有且仅有一个正确答案。)

1、以下哪个是面向对象的高级语言()。

A. 汇编语言

B. C++

C. Fortran

D. Basic

2、1TB代表的字节数量是()。

A.2的10次方

B. 2的20次方

C. 2的30次方

D. 2的40次方

3、二进制数00100100和00010101的和是。

A.00101000

B.001010100

C.01000101

D.00111001

4、以下哪一种设备属于输出设备()

A.扫描仪

B.键盘

C.鼠标

D.打印机

5、下列对操作系统功能的描述最为完整的是()

A.负责外设与主机之间的信息交换

B.负责诊断机器的故障

C.控制和管理计算机系统的各种硬件和软件资源的使用

D.将源程序编译成目标程序

6.CPU、存储器、I/O设备是通过()连接起来的。

A. 接口

B.总线

C.控制线

D.系统文件

7、断电后会丢失数据的存储器是()。

A.RAM

B.ROM

C.硬盘

D.光盘

8、以下哪一种是属于电子邮件收发的协议()。

A.SMTP

B.UDP

C.P2P

D.FTP

9、下列选项中不属于图像格式的是()

A.JPG格式

B. TXT格式

C.GIF格式

D.PNG格式

10.链表不具有的特点是()

A.不必事先估计存储空间 B.可随机访问任一元素

C.插入删除不需要移动元素 D.所需空间与线性表长度成正比

11、下列各无符号十进制整数中,能用八位二进制表示的数中最大的是()。

A.296 B.133 C.256 D.199

12.下列几个32位IP地址中,书写错误的是()。

A.162.105.130.27

B.192.168.0.1

C.256.256.129.1

D.10.0.0.1

13.要求以下程序的功能是计算:s=1+1/2+1/3+……+1/10。

Var

N:integer;

S:real;

Begin

S:=1.0;

For n :=10 downto 2 do

S:=s+1 div n;

Writeln(s:6:4);

End.

程序运行后输出结果错误,导致错误结果的程序行是()。

A. S:=1.0;

B. For n :=10 downto 2 do

C. S:=s+1 div n;

D. Writeln(s:6:4);

14.设变量x为real型且已赋值,则以下语句中能将x中的数值保留到小数点后两位,并将第三位四舍五入的是()。

A. x:=(x*100)+0.5/100.0

B. x:=(x*100+0.5)/100.0

C. x:=trunc(x*100+0.5)/100.0

D. x:=(x/100+0.5)*/100.0

15.有以下程序:

Var

S,a,N:integer;

Begin

S:=0; a:=1; Readln(n);

Repeat

S:=s+1;

A:=a-2;

Until a=n;

Writeln(s);

End.

若要使程序的输出值为2,则应该从键盘给n输入的值是()

A. -1

B. -3

C. -5

D. 0

16.一颗具有5层的满二叉树中结点数为()

A.31 B.32 C.33 D.16

17.有向图中每个顶点的度等于该顶点的()。

A.入度

B.出度

C.入度和出度之和

D. 入度和出度之差

18.设有100个数据元素,采用折半搜索时,最大比较次数为()。

A.6 B.7 C.8 D.10

19. 若有如下程序段,其中s、a、b、c均为定义的整型变量,且a、c均已赋值,c>0。 S:=a;

For b :=1 to c do

S:=s+1;

则与上述程序段功能等价的赋值语句是()

A.s:=a+b B.s:=a+c C.s:=s+b D.s:=b+c

20.计算机的最高奖是():

A.菲尔兹奖 B.诺贝尔奖 C.图灵奖 D.普利兹奖

二.问题求解(共2题,每空5分,共计10分)

1、把M个同样的球放到N个同样的袋子里,允许有的袋子空着不放,问共有多少种不同的放置方法?(用K表示)。

例如:M=7,N=3时,K=8;在这里认为(5,1,1)和(1,5,1)是同一种放置方法。

问:M=8,N=5时,K= 。

2、如图所示,图中每条边上的数字表示该边的长度,则从A到E的最短距离是。

三.阅读程序写结果(共4题,每题8分,共计32分)

1. var

a,b,c,d,ans:integer;

begin

readln(a,b,c);

d:=a-b;

a:=d+c;

ans:=a*b;

writeln('Ans=',ans);

end.

输入:2 3 4

输出:

2.var

N:integer;

Function fun(n:integer):integer;

Begin

If n=1 then exit(1);

If n=2 then exit(2);

Exit(fun(n-2)-fun(n-1));

End;

Begin

Readln(n);

Writeln(fun(n));

End.

输入:7

输出:

3、

var st:string; len,i:integer;

begin

readln(st); len:=length(st);

for i:=1 to len do

if (st[i]>=’a’)and (st[i]<=’z’) then

st[i]:=chr(ord(st[i])-ord(‘a’)+ord(‘A’));

writeln(st)

end.

输入:Hello,my name is Lostmonkey.

输出:

4、

Const

Size=100;

var

p:array[1..size] of integer;

n,tot,cn,i:integer;

begin

readln(n);

for i:=1 to n do p[i]:=1;

tot:=0;

for i:=2 to n do

begin

if p[i]=1 then tot:=tot+1;

cn:=i*2;

while cn<=n do

begin

p[cn]:=0;

cn:=cn+I;

end;

end;

writeln(tot);

end.

输入:30

输出:

四.完善程序 (前4空,每空3分,后4空,每空4分,共28分)

1 、(数字删除)下面程序的功能室将字符串中的数字字符删除后输出,请填空(每空3分,共12分):

var

s:string;

len,i:integer;

function delnum (var s:string):integer;

var

I,j:integer;

begin

j:=1;

for I:=1 to length(s) do

if (s[i]<’0’) (1) (s[i]>’9’) then

begin

s[j]:=s[I];

(2) ;

end;

exit( (3) );

end;

begin

readln(s);

len:=delnum(s);

for I:=1 to len do

write( (4) );

writeln;

end.

2.(最大子矩阵和)

给出m行n列的整数矩阵,求最大的子矩阵和(子矩阵不能为空)。

输入第一行包含两个整数m和n,即矩阵的行数和列数。之后m行,每行n个整数,描述整个矩阵。程序最终输出最大的子矩阵和。(最后一空4分,其余3分,共16分) const

SIZE=100;

var

matrix: array [1..SIZE, 1..SIZE] of integer;

rowsum: array [1..SIZE, 0..SIZE] of integer;

//rowsum[i, j]记录前i行前j个数的和

M,n, i, j, first, last, area, ans:integer;

begin

read(m, n);

for i := 1 to m do

for j:=1 to n do

read(matrix[i, j]);

ans:=matrix (1) ;

for i:=1 to m do

(2) ;

for i:=1 to m do

for j:=1 to n do

rowsum[i, j]:=_ (3) ;

for first := 1 to n do

for last:=first to n do

begin

(4) ;

for i:=1 to m do

begin

area:=area+ (5) ; if (area>ans) then

ans:=area;

if (area<0) then

area:=0;

end;

end;

writeln(ans);

end.

答卷部分

一. 选择一个正确答案代码(A/B/C/D),填入每题的括号内 (每题1.5分,多选无分, 共30 分)

二.问题解答(每题5分,共10分)

1. 答:18

2. 答:11

三. 阅读程序,并写出程序的正确运行结果:(每题8分,共32分)

(1) 程序的运行结果是:Ans=9

(2) 程序的运行结果是:-11

(3) 程序的运行结果是:HELLO,MY NAME IS LOSTMONKEY.

(4) 程序的运行结果是:10

四.根据题意, 将程序补充完整 (前8空,每空3分,最后1空4分,共28分)

noip普及组复赛模拟试题26(答案)

1.数字反转(reverse.cpp/c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。【输入】输入文件名为reverse.in。 输入共 1 行,一个整数N。 【输出】输出文件名为reverse.out。 输出共 1 行,一个整数,表示反转后的新数。 【输入输出样例1】reverse.in reverse.out 123 321 【输入输出样例2】Reverse.in reverse.out -380 -83 【数据范围】-1,000,000,000 ≤N≤1,000,000,000。 var s3,s1,s2:string; n,i:integer; begin assign(input,'reverse.in');reset(input); assign(output,'reverse.out');rewrite(output); read(s1); n:=length(s1); if s1[1]='-' then begin s2:='-'; for i:=1 to n-1 do s1[i]:=s1[i+1]; delete(s1,n,1); end; n:=length(s1); for i:=1 to n do s3:=s3+s1[n-i+1]; i:=1; while(s3[i]='0')and(length(s3)>1) do delete(s3,1,1); write(s2+s3); close(input);close(output); end. 2.统计单词数(stat.cpp/c/pas)【问题描述】一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章 中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配, 即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例1), 如果给定单词仅是文章中某一单词的一部分则不算匹配(参见样例2)。 【输入】输入文件名为stat.in,2 行。 第 1 行为一个字符串,其中只含字母,表示给定单词; 第 2 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

NOIP2015初赛普及组C++题目及答案 (2)

选手注意:第二十一届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 竞赛时间:2015年10月11日14:3016:30

试题纸共有7页,答题纸共有2页,满分100分。请在答题纸上作答,写在试题纸上的一律无效。 不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共20题,每题分,共计30分;每题有且仅有一个正确选项) 1. 1MB等于()。 字节字节字节字节 2. 在PC机中,PENTIUM (奔腾)、酷睿、赛扬等是指()。 A.生产厂家名称 B.硬盘的型号的型号 D.显示器的型号 3. 操作系统的作用是()。 A.把源程序译成目标程序 B.便于进行数据管理 C. 控制和管理系统资源 D.实现硬件之间的连接 4. 在计算机内部用来传送、存贮、加工处理的数据或指令都是以()形式进行的。 A.二进制码 B.八进制码 C.十进制码 D.智能拼音码 5. 下列说法正确的是()。 A. CPU的主要任务是执行数据运算和程序控制 B. 存储器具有记忆能力,其中信息任何时 候都不会丢失C. 两个显示器屏幕尺寸相 同,则它们的分辨率必定相同D. 个人 用户只能使用Wifi的方式连接到Internet 6. 二进制数00100100和00010100的和是()。 A. 00101000 01000001 7. 与二进制小数相等的十六进制数是() A. 0.8 0.4 所谓的“中断”是指()。 A. 操作系统随意停止一个程序的运行 B. 当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的过 程 C. 因停机而停止一个程序的运行 D. 电脑死机 9. 计算机病毐是()。 A. 通过计算机传播的危害人体健康的一种病毒 B. 人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合 C. 一种由于计算机元器件老化而产生的对生态环境有害的物质 D. 利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒可以用于()。 A.远程传输文件 B.发送电子邮件 C.浏览网页 D.网上聊天 11.下面哪种软件不属于即时通信软件()。 C..P2P 个顶点的连通图的最小生成树,其边数为()。 5 13.链表不具备的特点是()。

noip2014普及组复赛题解

1.珠心算测验 注意看清题意:其中有多少个数,恰好等于集合中另外两个(不同 的)数之和。这样的题意加上100的规模,建议暴力3个for: #include #include #include #include using namespace std; int n; int a[105]; int main(){ freopen("count.in","r",stdin); freopen("count.out","w",stdout); scanf("%d",&n); for(int i=1; i<=n; i++){ scanf("%d",&a[i]); } sort(a+1,a+n+1); int res=0; for(int i=1; i<=n; i++){ int ok=0; for(int j=1; j<=n && !ok; j++) if(j!=i){ for(int k=1; k<=n && !ok; k++) if(a[k]!=a[j]){ if(a[j]+a[k]==a[i]) ok=1; } } res+=ok; } printf("%d\n",res); return 0; } 2.比例简化 L很小,还是枚举,然后比较的话建议用乘法比较,避免精度问题:#include #include #include using namespace std; int A,B,L; int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b); } int main(){ freopen("ratio.in","r",stdin); freopen("ratio.out","w",stdout); scanf("%d%d%d",&A,&B,&L); int ba=1000000,bb=1; for(int i=1; i<=L; i++){ for(int j=1; j<=L; j++){ if(gcd(i,j)==1 && i*B>=j*A){

NOIP2015普及组解题报告

NOIP2015 普及组解题报告 From 贴吧id u007zzt 金币 国王将金币作为工资,发放给忠诚的骑士。 第一天骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天,每天收到四枚金币,以此类推;这种工资发放模式会一直延续下去,当连续N天收到N枚金币后,骑士会在之后的N+1天,每天收到N+1枚金币。 请计算前K天里,骑士一共获得了多少金币。 输入格式 输入包含一个正整数K,表示发放金币的天数。 输出格式 输出一个正整数,即骑士收到的金币数。 样例1 样例输入1 6 样例输出1 14 样例2 样例输入2 1000 样例输出2 29820 对于全部数据,1≤K≤10000。 这种题目,简直就属于水题狂做的那种。不多说,附C++代码。 #include "stdio.h" int k,ans=0; int main(){ freopen("coin.in","r",stdin); freopen("coin.out","w",stdout); scanf("%d",&k); int i=1; while(k){ if(k>=i){ ans+=i*i; k-=i; }else{ ans+=k*i; k=0;

} i++; } printf("%d\n",ans); return 0; } 扫雷游戏 扫雷游戏是一款十分经典的单机小游戏。 在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。 玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。 游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。 现在给出n行m列的雷区中的地雷分布,要求计算出每个非地雷格周围的地雷格数。 注:一个格子的周围格子包括其上、下、左、右、左上、左下、右上、右下八个方向上与之直接相邻的格子。 输入格式 第一行用一个空格隔开的两个整数n和m,分别表示雷区的行数和列数。 接下来n行,每行m个字符,描述了雷区中的地雷分布情况。字符?'表示相应的格子是地雷格,字符(?)`表示相应的格子是非地雷格子。相邻字符之间无分隔符。 输出格式 输出文件包括n行,每行m个字符,描述了整个雷区。用?表示地雷格,用周围地雷格数表示非地雷格。相邻字符之间无分隔符。 样例1 样例输入1 3 3 *?? ??? ?*? 样例输出1 *10 221 1*1 样例2 样例输入2 2 3 ?*? *?? 样例输出2 2*1 *21

noip普及组复赛模拟试题18

1. 话说去年苹果们被陶陶摘下来后都很生气,于是就用最先进的克隆技术把陶陶克隆了好多份>.<然后把他们挂在树上,准备摘取。摘取的规则是,一个苹果只能摘一个陶陶,且只能在它所能摘到的高度以下(即是小于关系)的最高的陶陶,如果摘不到的话只能灰溜溜的走开了>.<给出苹果数目及每个苹果可以够到的高度和各个陶陶的高度,求苹果们都摘完后剩下多少个陶陶…… 【输入格式】第一行为两个数,分别为苹果的数量n和陶陶的数量m(n,m<=2000)以下的n行,分别为各个苹果能够到的最大高度。再接下来的m行,分别为各个陶陶的高度。高度均不高于300。 当然了,摘取的顺序按照输入的“苹果够到的最大高度”的顺序来摘。 【输出格式】输出仅有一个数,是剩下的陶陶的数量 【样例输入】5 5↙9↙10↙2↙3↙1↙6↙7↙8↙9↙10 【样例输出】3 2. 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生发奖学金。期末,每个学生都有3门课的成绩:语文、数学、英语。先按总分从高到低排序,如果两个同学总分相同,再按语文成绩从高到低排序,如果两个同学总分和语文成绩都相同,那么规定学号小的同学排在前面,这样,每个学生的排序是唯一确定的。 任务:先根据输入的3门课的成绩计算总分,然后按上述规则排序,最后按排名顺序输出前5名学生的学号和总分。注意,在前5名同学中,每个人的奖学金都不相同,因此,你必须严格按上述规则排序。例如,在某个正确答案中,如果前两行的输出数据(每行输出两个数:学号、总分)是:7 279 5 279 这两行数据的含义是:总分最高的两个同学的学号依次是7号、5号。这两名同学的总分都是279(总分等于输入的语文、数学、英语三科成绩之和),但学号为7的学生语文成绩更高一些。如果你的前两名的输出数据是:5 279 7 279则按输出错误处理,不能得分。【输入】输入文件scholar.in包含n+1行: 第1行为一个正整数n,表示该校参加评选的学生人数。 第2到n+1行,每行有3个用空格隔开的数字,每个数字都在0到100之间。第j行的3个数字依次表示学号为j-1的学生的语文、数学、英语的成绩。每个学生的学号按照输入顺序编号为1~n(恰好是输入数据的行号减1)。 所给的数据都是正确的,不必检验。 【输出】输出文件scholar.out共有5行,每行是两个用空格隔开的正整数, 依次表示前5名学生的学号和总分。 【输入输出样例1】 scholar.in scholar.out 6 90 67 80 87 66 91 78 89 91 88 99 77 67 89 64 78 89 98 6 265 4 264 3 258 2 244 1 237 【输入输出样例2】 scholar.in scholar.out 8 80 89 89 8 265 2 264

NOIP2015信息学奥赛普及组初赛C++试题

2015年第二十一届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 竞赛日寸间:2015年10月l 1日14:30~16:30 选手注意: ●试题纸共有7页,答题纸共有2页,满分100分。请在答题纸上作答,写在试题纸上的一律无效。 ●不得使用任何电子设备(如计算器、手机、电子词典等)或查阅任何书籍资料。 一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选 项) 1.1MB等于( )。 A.1000字节B.1024字节 C.1000X 1000字节D.1024X 1024字节 2.在PC机中,PENTIUM(奔腾)、酷睿、赛扬等是指( )。 A.生产厂家名称B.硬盘的型号C.CPU的型号D.显示器的型号 3.操作系统的作用是( )。 A.把源程序译成目标程序B.便于进行数据管理 C.控制和管理系统资源D.实现硬件之间的连接 4.在计算机内部用来传送、存贮、加工处理的数据或指令都是以( )形式进行的。 A.二进制码B.八进制码C.十进制码D.智能拼音码 5.下列说法正确的是( )。 A.CPU的主要任务是执行数据运算和程序控制 B.存储器具有记忆能力,其中信息任何时候都不会丢失 C.两个显示器屏幕尺寸相同,则它们的分辨率必定相同 D.个人用户只能使用Wifi的方式连接到Internet 6.二进制数00100100和00010100的和是( )。 A. 00101000 B. 01001001 C. 01000100 D.00111000 7.与二进制小数0.1相等的十六进制数是( )。 A.0.8 B.0.4 C.0.2 D.0.1 8.所谓的“中断”是指( )。 A.操作系统随意停止一个程序的运行 B.当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的过程 C.因停机而停止一个程序的运行 D.电脑死机 9.计算机病毒是( )。 A.通过计算机传播的危害人体健康的一种病毒 B.人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合 C.一种由于计算机元器件老化而产生的对生态环境有害的物质 D.利用计算机的海量高速运算能力而研制出来的用于疾病预防的新型病毒 10.FTP可以用于( )。 A.远程传输文件B.发送电子邮件C.浏览网页D.网上聊天 11.下面哪种软件不属于即时通信软件( )。 A.QQ B.MSN C.微信D.P2P 12.6个顶点的连通图的最小生成树,其边数为( )。 A. 6 B. 5 C.7 D. 4 13.链表不具备的特点是( )。 A.可随机访问任何一个元素 B.插入、删除操作不需要移动元素

NOIP1999普及组(复赛)

第五届全国青少年信息学(计算机)奥林匹克分区联赛复赛试题 (普及组 竞赛用时:3小时) 第一题 Cantor 表(30分) 现代数学的著名证明之一是Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的: 我们以Z 字形给上表的每一项编号。第一项是1/1,然后是1/2,2/1,3/1,2/2,… 输入:整数N (1≤N ≤10000000) 输出:表中的第N 项 样例: INPUT OUTPUT N=7 1/4 第二题 回文数(30分) 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。 例如:给定一个10进制数56,将56加56(即把56从右向左读),得到121是一个回文数。 又如:对于10进制数87: STEP1:87+78 = 165 STEP2:165+561 = 726 STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一步是指进行了一次N 进制的加法,上例最少用了4步得到回文数4884。 写一个程序,给定一个N (2<=N<=10,N=16)进制数M ,求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible !” 样例: INPUT OUTPUT N = 9 M= 87 STEP=6 第三题 旅行家的预算(40分) 一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时油箱是空的)。给定两个城市之间的距离D1、汽车油箱的容量C (以升为单位)、每升汽油能行驶的距离D2、出发点每升汽油价格P 和沿途油站数N (N 可以为零),油站i 离出发点的距离Di 、每升汽油价格Pi (i=1,2,…,N )。计算结果四舍五入至小数点后两位。如果无法到达目的地,则输出“No Solution ”。 样例: INPUT … 1/1 1/2 1/3 1/4 1/5 … 2/1 2/2 2/3 2/4 … 3/1 3/2 3/3 … 4/1 4/2 … 5/1 … …

noip 普及组复赛

NOIP2011 普及组复赛 1.数字反转(c/pas) 【问题描述】 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。(参见样例2) 【输入】 输入文件名为。 输入共一行,一个整数N。 【输出】 输出文件名为。 输出共1行,一个整数,表示反转后的新数。 -1,000,000,000≤N≤1,000,000,000。 【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及-0,但测试数据没出)。 【法一】字符串处理 Var i,l,k:integer; s:string; p:boolean; begin assign(input, ''); reset(input); assign(output, ''); rewrite(output); readln(s); l:=length(s); k:=1; if s[1]='-' then begin write('-'); k:=2; end; p:=true;; for i:=l downto k do begin if(p)and((s[i]='0')) then continue else begin write(s[i]); p:=false;; end; end; close(input); close(output); end. 【法二】数字处理 Var f:integer; n,ans:longint; begin assign(input, ''); reset(input); assign(output, ''); rewrite(output); readln(n);

NOIP2015普及组复赛解题报告

精心整理 NOIP2015普及组解题报告 南京师范大学附属中学树人学校CT 1.金币(coin.cpp/c/pas) 【问题描述】 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天) 放模式会一直这样延续下去:当连续N 续N+1天里,每天收到N+1枚金币。 请计算在前K 【输入格式】 输入文件名为coin.in。 输入文件只有1 【数据说明】 对于100%的数据,1≤K≤10,000。 【思路】 模拟 【时空复杂度】 O(k),O(1)

2、扫雷游戏(mine.cpp/c/pas) 【问题描述】 扫雷游戏是一款十分经典的单机小游戏。在n行m列的雷区中有一些格子含有地雷(称之为地雷格),其他格子不含地雷(称之为非地雷格)。玩家翻开一个非地雷格时,该格将会出现一个数字——提示周围格子中有多少个是地雷格。游戏的目标是在不翻出任何地雷格的条件下,找出所有的非地雷格。 现在给出n行m 向上与之直接相邻的格子。 【输入格式】 输入文件名为mine.in。 接下来n行,每行m 雷个数表示非地雷格。相邻字符之间无分隔符。 【数据说明】 对于100%的数据,1≤n≤100,1≤m≤100。 【思路】 模拟 【技巧】

可将数组多开一圈,省去边界条件的判断。【时空复杂度】 O(mn),O(mn)

3.求和(sum.cpp/c/pas) 【问题描述】 一条狭长的纸带被均匀划分出了n个格子,格子编号从1到n。每个格子上都染了一种颜色color i(用[1,m]当中的一个整数表示),并且写了一个数字number i。 定义一种特殊的三元组:(x,y,z),其中x,y,z都代表纸带上格子的编号,这里的三元组要求满足以下两个条件: 1.x,y,z都是整数,x

NOIP2015初赛普及组C++试题及参考答案

第二十一届全国青少年信息学奥林匹克联赛初赛 普及组C++语言试题 竞赛时间:2015年10月11日14:30-16:30 一、单项选择题(共20题,每题1.5分,共计30分;每题有且仅有一个正确选项) ⒈1MB等于( )。 A.10000字节 B.1024字节 C.1000×1000字节 D.1024×1024字节 ⒉在PC机中,PENTIUM(奔腾)、酷睿、赛扬等是指( )。A.生 产厂家名称 B.硬盘的型号 C.CPU的型号 D.显示器的型号 ⒊操作系统的作用是( )。 A.把源程序译成目标程序 B.便于进行数据管理 C.控制和管理系统资源 D.实现硬件之间的连接 ⒋在计算机内部用来传送、存贮、加工处理的数据或指令都是以( )形式进行的。 A.二进制码 B.八进制码 C.十进制码 D.智能拼音码 ⒌下列说法正确的是( )。 A.CPU的主要任务是执行数据运算和程序控制 B.存储器具有记忆能力,其 中信息任何时候都不会丢失C.两个显示器屏幕尺寸相同,则它们的分辨率 必定相同D.个人用户只能使用Wifi的方式连接到Internet ⒍二进制数00100100和00010100的和是( )。 A.00101000 B.01100111 C.01000100 D.00111000 ⒎与二进制小数0.1相等的十六进制数是( )。 A.0.8 B.0.4 C.0.2 D.0.1 ⒏所谓的“中断”是指( )。A.操 作系统随意停止一个程序的运行 B.当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的过程 C.因停机而停止一个程序的运行 D.电脑死机 ⒐计算机病毒是( )。A.通过计算机传播的 危害人体健康的一种病毒 B.人为制造的能够侵入计算机系统并给计算机带来故障的程序或指令集合 C.一种由于计算机元器件老化而产生的对生态环境有害的物质 D.利用计算 机的海量高速运算能力而研制出来的用于疾病预防的新型病毒 ⒑FTP可以用于( )。 A.远程传输文件 B.发送电子邮件 C.浏览网页 D.网上聊天 ⒒下面哪种软件不属于即时通信软件( )。 A.QQ B.MSN C.微信 D.P2P

noip普及组复赛模拟试题17(附答案)

图书馆馆长正犯愁呢,原来,有一堆的书要他整理,每本书都有一个书号(<=32767),现在他有一本书,这本书的书号为K(<=32767),现在他要找出一本书号比这本书大的书和书号比这本小的书(但都要最接近图书馆馆长已有的书号),将找到的这两本书的书号加起来,并算出加起来以后的数是否为素数 Input 第一行二个数为N,K,表示几本书以及手中书的书号(<=32767) 第二行开始有N个整数,表示这些书的书号 Output 第一行一个数,表示两本书书号加起来的和 第二行一个字符,表示和是否为素数,若是则输出"Y"否则输出"F"(引号不打出)Sample Input 6 5 6 4 5 3 1 20 Sample Output 10 F program ex1148; var n,k,i,x,s:integer; a:array[0..32767] of integer; f:boolean; begin readln(n,k); fillchar(a,sizeof(a),0); for i:=1 to n do begin read(x); a[x]:=1; end; s:=0; for i:=k+1 to 32767 do if a[i]<>0 then begin s:=s+i;break; end; for i:=k-1 downto 1 do if a[i]<>0 then begin s:=s+i;break; end; f:=true; for i:=2 to trunc(sqrt(s)) do if s mod i=0 then begin f:=false;break;end; writeln(s); if f=true then write('Y') else write('F'); end. 输入12 7 8 12 18 7 11 3 20 15 14 26 21 16 输出11 Y 输入21 10

8.noip2014试题

全国信息学奥林匹克联赛(NOIP2014)复赛普及组 第2页共6页 1. 珠心算测验 (count.cpp/c/pas) 【问题描述】珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。 某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?最近老师出了一些测验题,请你帮忙求出答案。 【输入】 输入文件名为count.in。输入共两行,第一行包含一个整数n,表示测试题中给出的正整数个数。 第二行有n个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。【输出】 输出文件名为count.out。输出共一行,包含一个整数,表示测验题答案。 【输入输出样例】 count.in count.out 4 1 2 3 4 2 【样例说明】 由1+2=3,1+3=4,故满足测试要求的答案为2。注意,加数和被加数必须是集合中的两个不同的数。 【数据说明】 对于100%的数据,3 ≤ n ≤ 100,测验题给出的正整数大小不超过10,000。

第3页共6页 2.比例简化 (ratio.cpp/c/pas) 【问题描述】 在社交媒体上,经常会看到针对某一个观点同意与否的民意调查以及结果。例如,对某一观点表示支持的有1498人,反对的有902人,那么赞同与反对的比例可以简单的记为1498:902。 不过,如果把调查结果就以这种方式呈现出来,大多数人肯定不会满意。因为这个比例的数值太大,难以一眼看出它们的关系。对于上面这个例子,如果把比例记为5:3,虽然与真实结果有一定的误差,但依然能够较为准确地反映调查结果,同时也显得比较直观。 现给出支持人数A,反对人数B,以及一个上限L,请你将A比B化简为A’比B’,要求在A’和B’均不大于L且A’和B’互质(两个整数的最大公约数是1)的前提下,A’/B’≥ A/B 且A’/B’ - A/B的值尽可能小。 【输入】 输入文件名为ratio.in。输入共一行,包含三个整数A,B,L,每两个整数之间用一个空格隔开,分别表示支持人数、反对人数以及上限。 【输出】输出文件名为ratio.out。 输出共一行,包含两个整数A’,B’,中间用一个空格隔开,表示化简后的比例。 【输入输出样例】 ratio.in ratio.out 1498 902 10 5 3 【数据说明】 对于100%的数据,1 ≤ A ≤ 1,000,000,1 ≤ B ≤ 1,000,000,1 ≤ L ≤ 100, A/B ≤ L。

noip2015初赛普及组答案分析

单项选择题 1.A。计算机内部的用来传送、存贮、加工处理的数据或指令都是以二进制形式进行的。 2.A。写这题我用的是排除法,B选项显然不对,内存在断电后数据会丢失,C选项也是,屏幕的分辨率是可以手动调整的,D选项,当年我们都用宽带连接Internet的。 3.A。二进制小数转化为十六进制小数时,每四位二进制数转化为以为 十六进制数,故0.10002可以转化为0.816。 4.D。我的做法是将每个数都化为二进制形式,因为十六进制数和八进 制数转化为二进制数很容易,最后求得答案是D。 5.D。在链表中,每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域,结点与结点之间是用指针 连接的,故地址不必连续。 6.B。模拟一下进栈出栈的过程就行了,共有6次操作:进栈,进栈,出栈,进栈,进栈,出栈,每次操作后栈内元素分别为”a”,”a b”,”a”,”a b c”,”a b c d”,”a b c”,故最后栈顶元素是c。 7.B。前序遍历的顺序是”根->左->右”,后序遍历的顺序是”左->右->根”,对照四个答案,只有B能满足题目要求。 8.B。我们知道树高为n的满二叉树的结点个数为2n?1,当树高为5 时结点个数为31,当树高为6时结点个数为63,故答案是B。 9.B。画一张图的事情,就不说了。 10.D。由递推公式可得T(n)=1+(1+2+…+n)=n2+n2+1,故算法时间 的复杂度为O(n2)。 11.D。用vector存边,由一个顶点的边引到另一个顶点,再不断引出别的顶点,过程中每个顶点和每条边都只用到一遍,故复杂度为O(n+e)。12.A。哈夫曼算法用来求哈夫曼树,此树的特点就是引出的路程最短, 求的过程运用到贪心思想,具体的请参考一下别的文章。 13.D。llink和rlink分别指向前驱和后继,不妨设p的前驱为o,在未插入前 p->llink就是o,o->rlink就是p,插入时,先将o->rlink赋为q,再将 q->rlink赋为p,然后将q->llink赋为o,最后将p->llink赋为q。 14.A。最粗暴的方法就是直接模拟,不知道有没有更先进的算法。 15.A。- -丨这题猜猜都是A,哪有考生自带鼠标的。

noip普及组复赛模拟试题8(答案)

Description 给定整数n(32位以内),判断它是否为2的方幂。是就输出'yes',否则输出'no'。 Input 一个整数n。 Output 一个字符串 Sample Input 4 Sample Output yes Hint n > 0 && ( ( n & ( n - 1 ) ) == 0 貌似是数学问题,套用了提示 program ex1560; var n:longint; begin readln(n); if (n>0) and (n and (n-1)=0) then write('yes') else write('no'); end. 输入 127 输出 NO 输入 262144 输出 YES 输入 68719476736 输出 YES 问题描述: 计算机软件版本通常被用来区分某种软件在不同时间的发布。大部分软件版本号都是用“.”分隔的非负数的序列。对两个不同的版本A = a1.a2.a3…an和B = b1.b2.b3…bm,如果下面两个条件之一成立,我们认为版本A要比版本B新: 1.对某个i,我们有:对所有j < i, ai > bi 和aj = bj; 2.n比m大,而且对所有i < m, ai = bi。 (ai和bi都不超过LONGINT) 在这个问题里,你要对给定的一组版本号,按照上面的定义从旧到新排序。 输入文件(VERSIONS.IN): 输入文件第一行是一个整数N(N<=20),表示要排序的版本数。接下来的N行每行一个版本号。每个版本号是长度不超过50的字符串。 输出文件(VERSIONS.OUT): 将排好序的结果以每行一个版本号输出。 输入输出样例: VERSIONS.IN 4 3.0.5 1 2.4 2.4.6 VERSIONS.OUT 1

noip普及组复赛入门训练12(答案)

PASCAL复习12 1.自然数(文件名ZRS.PAS) 【问题描述】任意给定一个自然数M(M<999999999),如果它的所有各位数字都是由0或1组成,则输出YES,否则输出NO.例: 输入:100 输出:YES 输入:31 输出: NO Var m,x,a:longint; f:boolean; Begin readln(m); x:=m; f:=true; while (x>0)and f do begin a:=x mod 10; if (a<>0)and(a<>1) then f:=false; x:=x div 10; end; if f then writeln(‘YES’) else writeln(‘NO’); readln; End. 2.字符串(文件名ZFC.PAS) 【问题描述】由键盘输入一个超过10个字符的字符串,已知其中有两个“A”,以回车键结束。请你编个程序实现一下两个功能, 1、打印出第一个“A”所在的位置 2、打印出两个“A”之间的字符以及字符个数。 输入:TEACHERSTUDENTAND 输出:3 CHERSTUDENT 11 V AR T,T1:INTEGER; C:CHAR; BEGIN T:=0;t1:=0; Read(c); Repeat t:=t+1;

if c=‘A’then begin writeln(t); read(c); repeat write(c); t1:=t1+1; read(c); until c=‘A’; end; read(c); Until c=chr(13); Writeln; Writeln(t1); END. 3.数位和与积(文件名HWHJ.pas) 【问题描述】试编写程序求出n个自然数的各个数位之和与之积。输入:一个自然数n(n<=5)及n个自然数 输出:各行依次输出每一个自然数n的各个数位之和与之积。例如: 输入: 3 92 23 1024 输出 11 18 5 6 7 0 var i,t,x,y,z:integer; begin readln(t); for i:=1 to t do begin read(x); y:=0; z:=1; while x>0 do begin y:=y+x mod 10; z:=z*(x mod 10); x:=x div 10; end; writeln(y,' ',z); end; readln; readln end. 4. 黑色星期五(文件名HSXQW.PAS)

noip普及组复赛

NOIP2011普及组复赛 1 .数字反转(c/pas ) 【问题描述】 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给 定的原数为零,否则反转后得到的新数的最高位数字不应为零。 (参见样例2) 【输入】 【输出】 输出文件名为。 -1,000,000,000 < N< 1,000,000,000 o 【解题】 这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及 但测试数据没出)。 【法一】字符串处理 Var i,l,k:i nteger; s:stri ng; p:boolea n; begin assig n(i nput, ”); reset(i npu t); assig n(output, ''); rewrite(out pu t); readl n(s); l:=le ngth(s); k:=1; if s[1]='-' the n begin write('-'); k:=2; en d; p:=true;; for i:=l dow nto k do begin if(p)an d((s[i]-0')) the n contin ue else begin write(s[i]); p :=false;; en d; en d; close(i npu t); close(out pu t); en d. 【法二】数字处理 Var f:i nteger; n,an s:lo ngint; begin assig n(i nput, ''); reset(i npu t); assig n(output, ''); rewrite(out pu t); readl n(n); 输入文件名为。 输入共一行,一个整数 No -0 ,

NOIP2015普及组复赛试题

CCF全国信息学奥林匹克联赛(NOIP2015)复赛 普及组 (请选手务必仔细阅读本页内容) 一、题目概况 中文题目名称金币扫雷游戏求和推销员 coin mine sum salesman 英文题目与子目 录名 可执行文件名coin mine sum salesman 输入文件名coin.in mine.in sum.in salesman.in 输出文件名coin.out mine.out sum.out salesman.out 每个测试点时限1秒 测试点数目10 每个测试点分值10 附加样例文件有 结果比较方式全文比较(过滤行末空格及文末回车) 题目类型传统 运行内存上限128M 二、提交源程序文件名 对于C++语言coin.cpp mine.cpp sum.cpp salesman.cpp 对于C语言coin.c mine.c sum.c salesman.c 对于Pascal语言coin.pas mine.pas sum.pas salesman.pas 四、注意事项: 1、文件名(程序名和输入输出文件名)必须使用英文小写。 2、C/C++中函数main()的返回值类型必须是int,程序正常结束时的返回值必须是0。 3、全国统一评测时采用的机器配置为:CPU AMD Athlon(tm)II x2240processor,2.8GHz,内存4G,上述时限以此配置为准。 4、只提供Linux格式附加样例文件。 5、特别提醒:评测在当前最新公布的NOI Linux下进行,各语言的编译器版本以其为准。

1.金币 (coin.cpp/c/pas) 【问题描述】 国王将金币作为工资,发放给忠诚的骑士。第一天,骑士收到一枚金币;之后两天(第二天和第三天),每天收到两枚金币;之后三天(第四、五、六天),每天收到三枚金币;之后四天(第七、八、九、十天),每天收到四枚金币……;这种工资发放模式会一直这样延续下去:当连续N天每天收到N枚金币后,骑士会在之后的连续N+1天里,每天收到N+1枚金币。 请计算在前K天里,骑士一共获得了多少金币。 【输入格式】 输入文件名为coin.in。 输入文件只有1行,包含一个正整数K,表示发放金币的天数。 【输出格式】 输出文件名为coin.out。 输出文件只有1行,包含一个正整数,即骑士收到的金币数。 【输入输出样例1】 coin.in coin.out 614 见选手目录下的coin/coin1.in和coin/coin1.ans。 【输入输出样例1说明】 骑士第一天收到一枚金币;第二天和第三天,每天收到两枚金币;第四、五、六天,每天收到三枚金币。因此一共收到1+2+2+3+3+3=14枚金币。 【输入输出样例2】 coin.in coin.out 100029820 见选手目录下的coin/coin2.in和coin/coin2.ans。 【数据说明】 对于100%的数据,1≤K≤10,000。

noip普及组复赛模拟试题22(答案)

军方截获的信息由n(n<=30000)个数字组成,因为是敌国的高端秘密,所以一时不能破获。最原始的想法就是对这n个数进行小到大排序,每个数都对应一个序号,然后对第i个是什么数感兴趣,现在要求编程完成。 【输入格式】 第一行n,接着是n个截获的数字,接着一行是数字k,接着是k行要输出数的序号。 【输出格式】 k行序号对应的数字。 【输入样例】Secret.in 5 121 1 126 123 7 3 2 4 3 【输出样例】Secret.out 7 123 121 program secret; const max=30000; var n,i,x,k:longint; a:array[1..max] of longint; procedure sort(l,r:longint); var i,j,t,mid:longint; begin i:=l;j:=r; mid:=a[(l+r)div 2]; repeat while a[i]mid do dec(j); if j>=i then begin t:=a[i]; a[i]:=a[j]; a[j]:=t; inc(i); dec(j) end; until i>j; if l

assign(input,'secret.in'); assign(output,'secret.out'); reset(input); rewrite(output); readln(n); for i:=1 to n do read(a[i]); sort(1,n); readln(k); for i:=1 to k do begin readln(x); writeln(a[x]); end; close(input); close(output); end. 输入 15 12 10 36 127 126 123 75 89 101 999 777 654 456 890 134 6 2 4 3 9 10 14 输出12 75 36 127 134 890 输入24 8 18 12 24 434 10 36 127 126 123 75 89 101 999 777 654 456 890 134 555 221 108 888 656 8 5 4 3 19 20 14 17 10 输出24

NOIP2014普及组复赛试题解答2

NOIP2014普及组复赛试题解答 3. 螺旋矩阵 【问题描述】 一个n 行n列的螺旋矩阵可由如下方法生成: 从矩阵的左上角(第1行第1列)出发,初始时向右移动:如果前方是未曾经过的格子,则继续前进,否则右转;重复上述操作直至经过矩阵中所有格子。根据经过顺序,在格子中依次填入1,2,3,…,n2,便构成了一个螺旋矩阵。 现给出矩阵大小n以及i和j,请你求出该矩阵中第i行第j列的数是多少。 【分析】 这是个蛇形填数问题。如果采用先枚举二维数组再找对应的元素方法,由于1 ≤n ≤30,000,需要建立一个 30,000× 30,000的二维数组,结果会发生数据溢出且超出运行内存上限(128M)。 我们可以采用类似贪吃蛇的方法,让它在N×N个方格内自外向内逐格移动,控制其向右转的方向,并计算其长度。 解法一 #include using namespace std; bool pd(int,int) ; int i,j; bool p; int main() { int n,x,y,u,d,l,r,tot=0; // U为上边界,D为下边界,L为左边界,R为右边界; freopen("matrix.in","r",stdin); freopen("matrix.out","w",stdout); scanf("%d%d%d",&n,&i,&j);

d=n;r=n;u=1;l=1; //各边界赋初值; x=1;y=0; p=true; while((totl)&&p){--y;++tot;pd(x,y);}++l;//在下侧边界上向左移动,当下侧一行的结束时,控制其左边界向右缩一列; while((x>u+1)&&p){--x;++tot;pd(x,y);}++u;//在左侧边界上向上移动,当左侧一列的结束时,控制其上边界向下缩一行; } printf("%d\n",tot); fclose(stdin);fclose(stdout); return 0; } bool pd(int x,int y) //判断是否到达目的地,如果到达则停止枚举; { if((x==i)&&(y==j))p=false; return P; } 解法二: 在上一个解法中,如果遇到极端情况时,可能需要枚举达900000000次,这显然太慢了些,我们可以根据贪吃移动的特点对程序进行优化。

相关文档
最新文档