C++ NOIP2019 普及组初赛程序解析

需积分: 10 1 下载量 170 浏览量 更新于2024-08-05 收藏 18KB DOCX 举报
这篇资源主要包含了两道C++编程题目,是NOIP2019普及组初赛的阅读程序,没有提供答案。第一道题目涉及字符串处理,包括字符转换和循环遍历。第二道题目是关于数组操作和逻辑判断,与路径选择和计数有关。 1. **字符串处理题目解析**: - 这段代码首先定义了一个字符数组`st[100]`用于存储输入的字符串,并通过`scanf("%s", st)`读取字符串。 - 然后用`strlen(st)`获取字符串长度`n`,并遍历字符串,从第二个字符开始(索引为1)检查每个字符。 - 如果当前索引`i`能被字符串长度`n`整除,表明该位置是每`n`个字符的起点,将该位置的字符转换:如果原字符是小写字母(ASCII值大于等于'a'),则将其转换为大写(减去'a'的ASCII值,加上'A'的ASCII值)。 - 最后,通过`printf("%s", st)`打印处理后的字符串。 - **判断题解析**: - 第1题:错误。输入的字符串可以包含其他字符,不只是大小写字母。 - 第2题:正确。若`i=0`,访问`st[-1]`会导致数组越界错误。 - 第3题:错误。修改后,某些字符可能不会被处理,因此结果会改变。 - 第4题:错误。输入全大写字母,输出会将每`n`个字符首字母转换为大写,因此结果会有所不同。 - **选择题解析**: - 第5题:若输入长度为18,最多有6个字符不同(每3个连续字符的第一个转换为大写)。 - 第6题:题目未提供具体选项,但根据逻辑,输入长度为36时,最多有36个字符不同,因为每对 `(x, y)` 会影响两个位置。 2. **数组操作题目解析**: - 此题初始化两个长度为100的数组`a[]`和`b[]`,并设所有元素为0。 - 接着,读取两个整数`n`和`m`,并根据`m`次输入更新数组`a[]`和`b[]`。 - 当遇到满足条件`a[x] < y && b[y] < x`的情况,更新`a[x]`和`b[y]`的值,并清零之前记录的对应项。 - 最后,统计数组`a[]`中值为0的个数`ans`。 这个题目可能是关于寻找某种路径或者建立某种关联,但是由于题目不完整,无法给出确切的解题过程和答案。完整的解题需要考虑完整的输入数据和题目描述。