2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第1题)

2020年信奥赛C++提高组csp-s初赛真题及答案解析(阅读程序第1题)

第1题
cpp 复制代码
1  #include <iostream>
2  using namespace std;
3   
4  int n;
5  int d[1000];
6   
7  int main() {
8    cin >> n;
9    for (int i = 0; i < n; ++i)
10      cin >> d[i];
11    int ans = -1;
12    for (int i = 0; i < n; ++i)
13      for (int j = 0; j < n; ++j)
14        if (d[i] < d[j])
15           ans = max(ans, d[i] + d[j] - (d[i] & d[j]));
16      cout << ans;
17      return 0;
18  }                 

假设输入的 n和 d[i]都是不超过 10000 的正整数,完成下面的判断题和单选题:

  • 判断题

    1. n 必须小于 1000,否则程序可能会发生运行错误。( )

      A. 正确 B. 错误

    2. 输出一定大于等于 00。( )

      A. 正确 B. 错误

    3. 若将第 13 行的 j=0 改为 j = i + 1 程序输出可能会改变。 ( )

      A. 正确 B. 错误

    4. 将第 14 行的 d[i] < d[j] 改为 d[i] != d[j],程序输出不会改变。( )

      A. 正确 B. 错误

  • 单选题

    1. 若输入 n为 100,且输出为 127,则输入的 d[i] 中不可能有( )。

      A. 127

      B. 126

      C. 128

      D. 125

    2. 若输出的数大于 0,则下面说法正确的是( )。

      A. 若输出为偶数,则输入的 d[i]d [i ] 中最多有两个偶数

      B. 若输出为奇数,则输入的 d[i]d [i ] 中至少有两个奇数

      C. 若输出为偶数,则输入的 d[i]d [i ] 中至少有两个偶数

      D. 若输出为奇数,则输入的 d[i]d [i ] 中最多有两个奇数

题目分析

给定代码的功能是:读入 n 和数组 d,然后通过双重循环计算所有满足 d[i] < d[j] 的数对 (i, j) 的表达式 d[i] + d[j] - (d[i] & d[j]) 的最大值,并输出该最大值(若没有满足条件的数对,则输出 -1)。实际上,d[i] + d[j] - (d[i] & d[j]) 等于 d[i] | d[j](按位或),因此程序求的是所有不同数值的数对(因为要求 d[i] < d[j],排除了相等的情况)的按位或的最大值。

判断题答案及解析
  1. 数组 d[1000] 的下标范围是 0 到 999,因此当 n ≤ 1000 时,程序不会发生数组越界;当 n > 1000 时,必然越界。题目说"n 必须小于 1000",即要求 n < 1000,但实际 n = 1000 也是合法的,因此该说法错误。
    答案:B

  2. ans 初始化为 -1,若没有满足 d[i] < d[j] 的数对(例如所有数相等或 n=1),则输出 -1,可能小于 0。因此说法错误。
    答案:B

  3. 原代码遍历所有 i, j,条件 d[i] < d[j] 使得每个不同数值的数对恰好被计算一次(因为若 a < b,则只有 a 作为 d[i]b 作为 d[j] 时成立)。改为 j = i + 1 后,只考虑 i < j 的情况,此时条件 d[i] < d[j] 可能漏掉那些索引较大但数值较小的数对(例如 d[0]=5, d[1]=3 就不会被计算)。因此输出可能改变。
    答案:A

  4. 原条件只计算 d[i] < d[j] 的情况,每个不同数值的数对恰好出现一次。新条件计算所有 d[i] != d[j] 的情况,每个数对会出现两次(ij 互换),但两次的表达式值相同,因此最大值不变。所以输出不会改变。
    答案:A

单选题答案解析
  1. 输出为 127 说明所有数对的按位或最大值是 127。若存在 128,则 128 与任何正整数的按位或至少为 128,会得到更大的值,矛盾。而 127、126、125 均可与其他数组合得到 127(例如 127 与 0 但 0 不是正整数,但可与 63 等组合;126 与 1 得 127;125 与 2 得 127)。因此不可能有 128。
    答案:C

  2. 输出是某对数的按位或。按位或的奇偶性:结果为偶数当且仅当两个数都是偶数;结果为奇数当且仅当至少有一个奇数。

    • A:输出为偶数 → 存在两个偶数,但输入中可能有多个偶数,故"最多两个偶数"错误。
    • B:输出为奇数 → 可能来自一个奇数和一个偶数,不一定需要两个奇数,故"至少两个奇数"错误。
    • C:输出为偶数 → 必然存在两个偶数(因为只有两个偶数才能得到偶数结果),故"至少有两个偶数"正确。
    • D:输出为奇数 → 输入中可以有多个奇数,故"最多两个奇数"错误。
      答案:C

专栏推荐:信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html


各种学习资料,助力大家一站式学习和提升!!!

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"##########  一站式掌握信奥赛知识!  ##########";
	cout<<"#############  冲刺信奥赛拿奖!  #############";
	cout<<"######  课程购买后永久学习,不受限制!   ######";
	return 0;
}

1、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:
https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:
https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:
https://blog.csdn.net/weixin_66461496/category_13113932.html

2、csp信奥赛冲刺一等奖有效刷题题解:

CSP信奥赛C++初赛及复赛高频考点真题解析(持续更新):https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

CSP信奥赛C++一等奖通关刷题题单及题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新)
https://blog.csdn.net/weixin_66461496/category_13125089.html

3、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):
https://blog.csdn.net/weixin_66461496/category_13117178.html

4、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}
相关推荐
会周易的程序员2 小时前
cNetgate插件架构设计详解 动态库 脚本二开lua, python, javascript
javascript·c++·python·物联网·lua·iot
普通网友2 小时前
C++与Rust交互编程
开发语言·c++·算法
xyty33202 小时前
QImageReader 的全局静态锁原理
c++·windows·qt
散峰而望2 小时前
【算法竞赛】堆和 priority_queue
开发语言·数据结构·c++·算法·贪心算法·动态规划·推荐算法
adore.9682 小时前
2.20 oj83+84+85
c++·复试上机
alexwang2113 小时前
B2007 A + B 问题 题解
c++·算法·题解·洛谷
Zik----3 小时前
Leetcode2 —— 链表两数相加
数据结构·c++·leetcode·链表·蓝桥杯
白太岁4 小时前
Muduo:(3) 线程的封装,线程 ID 的获取、分支预测优化与信号量同步
c++·网络协议·架构·tcp
仰泳的熊猫4 小时前
题目1523:蓝桥杯算法提高VIP-打水问题
数据结构·c++·算法·蓝桥杯