noip复赛模拟练习10答案.docx

上传人:b****8 文档编号:29320087 上传时间:2023-07-22 格式:DOCX 页数:14 大小:18.21KB
下载 相关 举报
noip复赛模拟练习10答案.docx_第1页
第1页 / 共14页
noip复赛模拟练习10答案.docx_第2页
第2页 / 共14页
noip复赛模拟练习10答案.docx_第3页
第3页 / 共14页
noip复赛模拟练习10答案.docx_第4页
第4页 / 共14页
noip复赛模拟练习10答案.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

noip复赛模拟练习10答案.docx

《noip复赛模拟练习10答案.docx》由会员分享,可在线阅读,更多相关《noip复赛模拟练习10答案.docx(14页珍藏版)》请在冰豆网上搜索。

noip复赛模拟练习10答案.docx

noip复赛模拟练习10答案

喜羊羊运动会——撑杆跳高

【试题描述】

运动会马上就要开始了,撑杆跳高场地上,羊村的N(3<=N<=100)个村民正排成一队有秩序地练习。

“好高啊,我都不知道自己能不能跳过去”,懒羊羊慢条斯理地说道。

“这么高,不知道最少要几只羊叠在一起才会够得着”,沸羊羊向来比较喜欢思考数学问题,这样说道。

试编一程序,计算出最少要几只羊叠在一起(一头羊踩在另一头羊的背上)才能够得着横杆(所谓够得着,指羊的身高总和不小于横竿的高度B)。

如果N头羊叠在一起,都够不着横竿,则输出“Impossible”

【输入描述】

第一行:

两个整数N(3<=N<=100)和B,表示队伍中羊的总数以及横竿的高度。

第二行:

空格隔开的N个整数,表示每只羊的身高Hi(1<=Hi<=10000)。

【输出描述】一行,一个整数,表示最少要几头羊才能够到横竿。

如果N只羊叠在一起都够不着则输出“Impossible”。

【输入样例】

样例1:

523

68139

样例2:

616

123135

【输出样例】

样例1:

3

样例2:

Impossible

【试题来源】武进区夏令营程序设计小能手PK

programex1797;

varn,i,j,t,sum:

integer;

b,s:

real;

a:

array[1..100]ofinteger;

begin

readln(n,b);

fori:

=1tondoread(a[i]);

fori:

=1ton-1do

forj:

=i+1tondo

ifa[i]

t:

=a[i];

a[i]:

=a[j];

a[j]:

=t;

end;

s:

=0;i:

=0;sum:

=0;

repeat

inc(i);

s:

=s+a[i];

inc(sum);

until(s>=b)or(i>=n);

ifs

end.

彩票摇奖(LOTTERY.PAS)

【问题描述】

为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。

该彩票的规则是:

(1)每张彩票上印有7个各不相同的号码,且这些号码的取指范围为1~33。

(2)每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。

(3)共设置7个奖项,特等奖和一等奖至六等奖。

兑奖规则如下:

特等奖:

要求彩票上7个号码都出现在中奖号码中。

一等奖:

要求彩票上有6个号码出现在中奖号码中。

二等奖:

要求彩票上有5个号码出现在中奖号码中。

三等奖:

要求彩票上有4个号码出现在中奖号码中。

四等奖:

要求彩票上有3个号码出现在中奖号码中。

五等奖:

要求彩票上有2个号码出现在中奖号码中。

六等奖:

要求彩票上有1个号码出现在中奖号码中。

注:

兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。

例如,中奖号码为2331114191718,则彩票1289231167由于其中有两个号码(23和1)出现在中奖号码中,所以该彩票中了五等奖。

现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。

输入文件(LOTTERY.IN):

输入文件的第一行只有一个自然数N≤1000,表示小明买的彩票张数;第二行存放了7个介于1和33之间的自然数,表示中奖号码;在随后的N行中每行都有7个介于1和33之间的自然数,分别表示小明所买的N张彩票。

输出文件(LOTTERY.OUT):

依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。

输入输出样例:

【输入样例】LOTTERY.IN

2

2331114191718

1289231167

11710212931

【输出样例】LOTTERY.OUT

0000011

彩票摇奖(LOTTERY.PAS)

【问题描述】

为了丰富人民群众的生活、支持某些社会公益事业,北塔市设置了一项彩票。

该彩票的规则是:

(1)每张彩票上印有7个各不相同的号码,且这些号码的取指范围为1~33。

(2)每次在兑奖前都会公布一个由七个各不相同的号码构成的中奖号码。

(3)共设置7个奖项,特等奖和一等奖至六等奖。

兑奖规则如下:

特等奖:

要求彩票上7个号码都出现在中奖号码中。

一等奖:

要求彩票上有6个号码出现在中奖号码中。

二等奖:

要求彩票上有5个号码出现在中奖号码中。

三等奖:

要求彩票上有4个号码出现在中奖号码中。

四等奖:

要求彩票上有3个号码出现在中奖号码中。

五等奖:

要求彩票上有2个号码出现在中奖号码中。

六等奖:

要求彩票上有1个号码出现在中奖号码中。

注:

兑奖时并不考虑彩票上的号码和中奖号码中的各个号码出现的位置。

例如,中奖号码为2331114191718,则彩票1289231167由于其中有两个号码(23和1)出现在中奖号码中,所以该彩票中了五等奖。

现已知中奖号码和小明买的若干张彩票的号码,请你写一个程序帮助小明判断他买的彩票的中奖情况。

输入文件(LOTTERY.IN):

输入文件的第一行只有一个自然数N≤1000,表示小明买的彩票张数;第二行存放了7个介于1和33之间的自然数,表示中奖号码;在随后的N行中每行都有7个介于1和33之间的自然数,分别表示小明所买的N张彩票。

输出文件(LOTTERY.OUT):

依次输出小明所买的彩票的中奖情况(中奖的张数),首先输出特等奖的中奖张数,然后依次输出一等奖至六等奖的中奖张数。

输入输出样例:

【输入样例】LOTTERY.IN

2

2331114191718

1289231167

11710212931

【输出样例】LOTTERY.OUT

0000011

var

a:

array[1..33,0..1000]ofboolean;

b:

array[0..7]oflongint;

n,i,j,u,s:

longint;

begin

readln(n);

fori:

=0tondo

forj:

=1to7do

begin

read(u);

a[u,i]:

=true;

end;

fori:

=1tondo

begin

forj:

=1to33do

ifa[j,0]thenifa[j,i]theninc(s);

inc(b[s]);

s:

=0;

end;

fori:

=7downto1do

write(b[i],'');

end.

贪污排名(Rank.pas\c\cpp)

【题目描述】

党的十七大热烈召开,胡书记发表了热情洋溢的讲话,其中一个内容是腐败问题,胡书记强调共产党与贪污腐败水火不容,体现了反腐倡廉的决心。

2007年的确是不平凡的一年,尤其在反腐败问题上,确定做了不少工作,抓了N个腐败分子,每抓一个贪官都要求他报出自己的财富,用一个整数表示,胡书记每抓一个都想知道这个贪官在已经抓获的贪官中按照财富排第几名。

党把这个光荣的任务交给了你。

Input

输入文件Rank.in第一行输入一个整数N,表示今年抓获贪官的数量。

接下来N行,每行一个整数,表示按照今年被抓获的顺序给出这N个贪官的财富。

Output

输出文件Rank.out输出N行,第i行表示第i个贪官的财富在1-i个贪官中排第几位。

SampleInput

6

78

24

68

40

39

89

SampleOutput

1

2

2

3

4

1

Hint

【数据说明】

100%的数据N<=45000,财富互不相同且不超过2*10^9(虽然现实中可能不止)

30%的数据N<=8000

Source

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·

·var

s:

array[1..45000]oflongint;

a,b:

array[1..45000,1..2]oflongint;

n,i,j,k,t,ss:

longint;

begin

readln(n);

readln(s[1]);

writeln('1');

fori:

=2tondobegin

readln(s[i]);

t:

=s[i];j:

=1;ss:

=0;

whilej<>0dobegin

ift>s[j]thenbegin

a[j,1]:

=a[j,1]+1;

k:

=j;j:

=b[j,1];

end

elsebegin

ss:

=ss+a[j,1]+1;

a[j,2]:

=a[j,2]+1;

k:

=j;j:

=b[j,2];

end;

end;

ift>s[k]thenb[k,1]:

=ielseb[k,2]:

=i;

writeln(ss+1);

end;

end.

所谓丑数,就是指那些因子只含2,3,5的数。

1,2,3,4,5,6,8,9,10,12,15是最前面的11个丑数。

为了方便起见,把1也看作是丑数。

请你编写一个程序,输入n,n<3000,寻找并打印第n个丑数。

如输入:

11

输出:

15

constmaxn=3000;

mark:

array[1..3]ofinteger=(2,3,5);

varI,j,n:

longint;min:

real;

p:

array[1..3]oflongint;

ugly:

array[1..maxn]ofreal;

beginwrite(‘inputn:

’);readln(n);

ugly[1]:

=1;

forI:

=1to3dop[I]:

=1;

forI:

=2tondo

beginmin:

=ugly[p[1]]*mark[1];

forj:

=2to3do

ifugly[p[j]]*mark[j]

=ugly[p[j]]*mark[j];ugly[I]:

=min;

forj:

=1to3do

ifugly[p[j]]*mark[j]=minthenp[j]:

=p[j]+1;

end;

writeln(ugly[n]:

0:

0);

readln

end.

输入40输出144输入2999输出278628139010

输入200输出16200输入1500输出859963392

锁妖塔的建造很特别,塔总共有n层,但是高度却不相同,这造成了小A爬过每层的时间也不同。

小A会用仙术,每用一次可以让他向上跳一层或两层,但是每次跳跃后小A都将用完灵力,必须爬过至少一层才能再次跳跃。

小A想用最短的时间爬到塔顶,可是他不能找到时间最短的方案。

所以请你帮他找到一个时间最短的方案让他爬到塔顶,小A只关心时间,所以你只要告诉他最短时间是多少就可以了。

[输入格式]tower.in

第一行一个整数n(n<=10000),表示塔的层数。

接下来的n行每行一个整数(<=100),表示从下往上爬每层所需的时间。

[输出格式]tower.out

一个数,表示最短时间。

[样例输入]

5

3

5

1

8

4

[样例输出]

1

[数据规模]

对20%的数据,n<=10

对40%的数据,n<=100

对60%的数据,n<=5000

对100%的数据,n<=10000

varn,i:

longint;

a:

array[1..10000]oflongint;

f:

array[-1..10000,1..2]oflongint;

functionmin(a,b:

longint):

longint;

begin

ifa

=aelsemin:

=b;

end;

begin

ssign(input,'tower.in');reset(input);

assign(output,'tower.out');rewrite(output);

readln(n);

fori:

=1tondoreadln(a[i]);

f[0,1]:

=0;f[0,2]:

=0;f[-1,1]:

=0;f[-1,2]:

=0;

fori:

=1tondobegin

f[i,1]:

=min(f[i-1,2],f[i-2,2]);

f[i,2]:

=min(f[i-1,1],f[i-1,2])+a[i];

end;

writeln(min(f[n,1],f[n,2]));

close(input);close(output);

end.

输入6

3

5

4

8

2

7输出6

输入10

2

8

3

1

4

9

7

5

6

4

输出12

输入9

3

5

4

8

2

6

7

5

8输出11

输入15

4

5

6

3

8

12

11

10

9

8

13

7

10

9

11输出36

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1