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

2019-03-03 13:10

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 行为一个字符串,其中只可能包含字母和空格,表示给定的文章。

【输出】输出文件名为 stat.out。

只有一行,如果在文章中找到给定单词则输出两个整数,两个整数之间用一个空格隔开, 分别是单词在文章中出现的次数和第一次出现的位置(即在文章中第一次出现时,单词首字 母在文章中的位置,位置从0 开始);如果单词在文章中没有出现,则直接输出一个整数-1。 【输入输出样例 1】stat.in stat.out To

to be or not to be is a question 2 0

【输入输出样例 1 说明】输出结果表示给定的单词 To 在文章中出现两次,第一次出现的位置为0。 【输入输出样例 2】stat.in stat.out to

Did the Ottoman Empire lose its power at that time -1

【输入输出样例 2 说明】表示给定的单词 to 在文章中没有出现,输出整数-1。

【数据范围】1 ≤ 单词长度≤ 10。1 ≤ 文章长度≤ 1,000,000

第二题有个陷阱,如果纯粹用字符串的7个操作命令,由于字串很长,后面几个点肯定超时。第二行的长串可以用字符一个个读。遇到空格跟上一行的串进行比较。这样能保证在规定时间内不超时。 var s1,s2:string; ch:char; s,first,n,i,ans:longint;

begin assign(input,'stat.in');reset(input); assign(output,'stat.out');rewrite(output); readln(s1); s1:=upcase(s1); first:=-1; n:=length(s1); while not eoln do begin

s2:=''; repeat

inc(s); read(ch); ch:=upcase(ch); if ch<>' 'then s2:=s2+ch; until (ch=' ')or eoln; if s2=s1 then if first=-1 then begin

first:=s-n-1; inc(ans); end else inc(ans); end;

if first=-1 then write(-1) else write(ans,' ',first); close(input);close(output); end.

3.数字统计 (two.pas/c/cpp) 【问题描述】 请统计某个给定范围[L, R]的所有整数中,数字 2 出现的次数。 比如给定范围[2, 22],数字 2 在数2中出现了 1次,在数 12中出现 1 次,在数 20 中出现 1 次,在数

21 中出现 1 次,在数 22 中出现 2 次,所以数字 2 在该范围内一共出现了 6次。

【输入】 输入文件名为 two.in。 输入共 1 行,为两个正整数 L 和 R,之间用一个空格隔开。 【输出】 输出文件名为 two.out。输出共 1 行,表示数字 2 出现的次数。 【输入输出样例1】 Two.out two.in 2 22 6

【输入输出样例2】 two.out two.in 2 100 20

【数据范围】 1 ≤ L ≤R≤ 10000。

var a,b,c,d,e,f:integer; begin

assign(input,'two.in');reset(input);

assign(output,'two.out');rewrite(output); readln(a,b); f:=0;d:=0;

for c:=a to b do begin e:=c; repeat

d:=e mod 10; e:=e div 10;

if d=2 then inc(f); until e=0; end;

writeln(f);

close(input);close(output); end.

输入2 100 输出 20 输入 1 1000 输出 300

输入 2222 2223 输出 7 输入 9993 10000 输出 0

4. 接水问题 (water.pas/c/cpp)【问题描述】 学校里有一个水房,水房里一共装有 m 个龙头可供同学们打开水,每个龙头每秒钟的供水量相等,均为 1。

现在有 n 名同学准备接水,他们的初始接水顺序已经确定。将这些同学按接水顺序从 1到 n 编号,i号同学的接水量为 wi。接水开始时,1 到 m号同学各占一个水龙头,并同时打开水龙头接水。当其中某名同学 j 完成其接水量要求 wj 后,下一名排队等候接水的同学 k马上接替 j 同学的位置开始接水。这个换人的过程是瞬间完成的,且没有任何水的浪费。即j 同学第x 秒结束时完成接水, 则 k 同学第 x+1 秒立刻开始接水。 若当前接水人数 n’不足 m,则只有 n’个龙头供水,其它 m?n’个龙头关闭。

现在给出 n名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。

【输入】输入文件名为 water.in。

第 1 行2 个整数 n 和 m,用一个空格隔开,分别表示接水人数和龙头个数。 第 2 行 n 个整数 w1、w2、??、wn,每两个整数之间用一个空格隔开,wi表示 i 号同学的接水量。

【输出】输出文件名为 water.out。

输出只有一行,1 个整数,表示接水所需的总时间。 【输入输出样例1】 water.out water.in

5 3 4 4 4 1 2 1

【输入输出样例1解释】

第 1 秒,3 人接水。第 1秒结束时,1、2、3 号同学每人的已接水量为 1,3 号同学接完水,4 号同学接替 3 号同学开始接水。

第 2 秒,3 人接水。第 2 秒结束时,1、2 号同学每人的已接水量为 2,4 号同学的已接水量为 1。

第 3 秒,3 人接水。第 3 秒结束时,1、2 号同学每人的已接水量为 3,4 号同学的已接水量为 2。4号同学接完水,5 号同学接替 4 号同学开始接水。 第 4 秒,3 人接水。第 4 秒结束时,1、2 号同学每人的已接水量为 4,5 号同学的已接水量为 1。1、2、5 号同学接完水,即所有人完成接水。 总接水时间为 4 秒。 【输入输出样例2】

water.in water.out 8 4 163 23 71 87 32 70 93 80 76

【数据范围】

1 ≤ n ≤ 10000,1 ≤m≤ 100 且 m≤ n; 1 ≤wi ≤ 100。

var a:array[1..101]of integer; b:array[1..10001]of integer; c,d,e,f,g:integer; h:longint; tf:boolean; begin

assign(input,'water.in');reset(input);

assign(output,'water.out');rewrite(output); fillchar(b,sizeof(b),0); fillchar(a,sizeof(a),0); readln(c,d); for e:=1 to c do read(b[e]);

for e:=1 to d do a[e]:=b[e]; f:=d; h:=0; repeat

tf:=true; inc(h);

for g:=1 to d do begin

if a[g]>0 then dec(a[g]);

while (a[g]=0)and(f0 then tf:=false;


noip普及组复赛模拟试题26(答案).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:上海交通大学继续教育学院计算机应用基础(二)第三次 word、excel

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: