文档详情

NOIP-2011普及组复赛(试题+源程序).doc

发布:2018-10-20约1.04万字共8页下载文档
文本预览下载声明
NOIP2011 普及组 复赛 NOIP2011普 复赛— NUMPAGES 8- PAGE 3 NOIP2011 普及组 复赛 1.数字反转(reverse.cpp/c/pas) 【问题描述】 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零。(参见样例2) 【输入】 输入文件名为reverse.in。 输入共一行,一个整数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。 【解题】这道题非常简单,可以读字符串处理,也可以读数字来处理,只不过要注意符号问题(以及-0,但测试数据没出)。 【法一】字符串处理 Var i,l,k:integer; s:string; p:boolean; begin assign(input, reverse.in); reset(input); assign(output, reverse.out); 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, reverse.in); reset(input); assign(output, reverse.out); rewrite(output); readln(n); if n0 then begin f:=-1; n:=-n; end else f:=1; ans:=0; while n0 do begin ans:=ans*10+n mod 10; n:=n div 10; end; ans:=ans*f; writeln(ans); close(input); close(output); end. 2.统计单词数(stat.pas/c/cpp) 【问题描述】 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数。 现在,请你编程实现这一功能,具体要求是:给定一个单词,请你输出它在给定的文章中出现的次数和第一次出现的位置。注意:匹配单词时,不区分大小写,但要求完全匹配,即给定单词必须与文章中的某一独立单词在不区分大小写的情况下完全相同(参见样例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
显示全部
相似文档