NOIP 2011 普及组复赛题目解析:数字反转与单词统计

需积分: 31 0 下载量 198 浏览量 更新于2024-09-03 收藏 29KB DOCX 举报
"这是关于全国青少年信息学奥林匹克联赛(NOIP)的C++题解文档,包含了2009年至2017年的试题与答案。主要涉及的编程语言是C++,适合备考NOIP的学生参考学习。文档中包含了两道具体的题目解析。” 第一题《数字反转》是一个基础的算法题,要求编写程序对输入的整数进行位反转。题目描述中指出,输入一个整数N,程序需要将其各位数字反转并输出新的整数。需要注意的是,反转后的最高位不能为0,除非原数本身就是0。例如,输入123,输出应该是321;输入-380,输出应为-83。此题的数据范围是-1,000,000,000到1,000,000,000,因此需要考虑负数和大整数的处理。 解决这个问题的方法通常是将整数转换为字符串,然后从后往前遍历字符串,构建反转后的数字。对于负数,需要单独处理符号位。在C++中,可以使用`std::to_string()`函数将整数转为字符串,再通过`std::reverse()`函数反转字符串,最后再将反转后的字符串转回整数。同时,需要检查反转后的最高位是否为0,并在必要时移除。 第二题《统计单词数》是一道涉及字符串处理的题目。用户需要提供一个单词,程序需要在一篇文章中找出这个单词出现的次数以及第一次出现的位置。题目要求不区分大小写,但匹配时要确保是完整的单词匹配,不能只是文章中某个单词的一部分。例如,输入"To",文章为"tobeornottobeisaquestion",输出应该是20,因为"To"在这个文章中出现了两次,第一次出现的位置是0。如果单词在文章中不存在,输出-1。 解决此题的关键在于正确地分割和比较文章中的单词。可以先将文章全部转换为小写,然后使用空格作为分隔符,通过`std::istringstream`或`std::string::find`等函数来查找目标单词。为了找到单词第一次出现的位置,可以使用`std::string::find_first_of`来获取单词在文章中的起始索引,注意索引是从0开始的。 这两题都是NOIP普及组的复赛题目,旨在考察参赛者的算法基础和编程能力,尤其是处理字符串和整数操作的能力。通过解决这类问题,考生可以提升对C++语言的理解,增强实际问题的解决能力。