noip普及组复赛模拟试题26(答案).doc_第1页
noip普及组复赛模拟试题26(答案).doc_第2页
noip普及组复赛模拟试题26(答案).doc_第3页
noip普及组复赛模拟试题26(答案).doc_第4页
noip普及组复赛模拟试题26(答案).doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1数字反转(reverse.cpp/c/pas)【问题描述】给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。【输入】输入文件名为 reverse.in。输入共 1 行,一个整数N。【输出】输出文件名为 reverse.out。输出共 1 行,一个整数,表示反转后的新数。【输入输出样例 1】reverse.in reverse.out123 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 s11=- then begin s2:=-; for i:=1 to n-1 do s1i:=s1i+1; delete(s1,n,1); end; n:=length(s1); for i:=1 to n do s3:=s3+s1n-i+1; i:=1; while(s3i=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.outToto be or not to be is a question2 0【输入输出样例 1 说明】输出结果表示给定的单词 To 在文章中出现两次,第一次出现的位置为0。【输入输出样例 2】stat.in stat.outtoDid 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.in Two.out 2 22 6 【输入输出样例2】 two.in two.out 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 输出 04. 接水问题 (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个龙头供水,其它 mn个龙头关闭。 现在给出 n名同学的接水量,按照上述接水规则,问所有同学都接完水需要多少秒。【输入】输入文件名为 water.in。 第 1 行2 个整数 n 和 m,用一个空格隔开,分别表示接水人数和龙头个数。 第 2 行 n 个整数 w1、w2、wn,每两个整数之间用一个空格隔开,wi表示 i 号同学的接水量。 【输出】输出文件名为 water.out。 输出只有一行,1 个整数,表示接水所需的总时间。 【输入输出样例1】 water.in water.out 5 3 4 4 1 2 1 4 【输入输出样例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 23 71 87 32 70 93 80 76 163 【数据范围】 1 n 10000,1 m 100 且 m n; 1 wi 100。var a:array1.101of integer;b:array1.10001of 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(be); for e:=1 to d do ae:=be; f:=d; h:=0; repeat tf:=true; inc(h); for g:=1 to d do begin if ag0 then dec(ag); while (ag=0)and(f0 then tf:=false; end; until tf=true; writeln(h); close(input);close(output);end.或const inf=water.in; ouf=water.out;var n,m,i,j,k,tot,min,max:longint; a:array1.10000 of longint; b:array1.100 of longint;begin assign(input,inf);reset(input); assign(output,ouf);rewrite(output); readln(n,m); for i:=1 to n do ai:=0; for i:=1 to n do read(ai); for i:=1 to m do bi:=ai; min:=maxlongint; max:=-maxlongint; if n=m then/如果水管数和人数相等,那么直接输出节水量的最大值就行了 begin for i:=1 to m do if bimax then max:=bi; writeln(max); close(input);close(output); halt; end; for i:=m+1 to n do begin min:=maxlongint; for j:=1 to m do if bjmax then max:=bi;/搜一遍,找接水量的最大值 writeln(max); close(input);close(output);end. 输入10 44 37 71 16 28 34 28 87 39 43 输出 124输入100 2076 26 67 21 73 19 66 23 46 57 63 8 58 65 94 65 96 1 98 52 92 36 28 7 67 94 92 76 85 38 54 88 28 33 33 55 4 94 66 28 69 86 67 98 36 14 94 27 41 59 79 96 96 29 100 52 11 27 60 87 56 54 66 38 52 87 100 82 46 70 52 34 52 65 78 74 35 94 29 84 77 40 86 19 24 79 42 6 32 53 44 85 61 31 99 64 74 61 81 81 输出 331模拟法 Var a:array1.10000 of

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论