【2023年莆田市第三期C++专项第二轮选拔真题】T1:快速反应 题解

T1:快速反应

题目概览

T1:快速反应
在这里插入图片描述

题目重现

小T作为班长要参加学校的快速反应比赛。比赛规则如下:

  1. 给定两个数字n和m
  2. 如果两数之和是奇数,输出"odd"
  3. 如果两数之和是偶数,则计算它们的乘积:
    • 如果乘积是奇数,输出"odd2"
    • 如果乘积是偶数,输出"even"

解题思路

这个问题看起来复杂,但其实可以通过简单的数学判断来解决。我们可以分步骤分析:

第一步:判断两数之和的奇偶性

两个数相加的结果奇偶性可以通过以下规则判断:

  • 奇数 + 偶数 = 奇数
  • 奇数 + 奇数 = 偶数
  • 偶数 + 偶数 = 偶数

因此,我们只需要检查n和m中奇数的个数:

  • 如果奇数个数为1(一个奇数一个偶数),和为奇数
  • 如果奇数个数为0或2,和为偶数

第二步:当和为偶数时判断乘积的奇偶性

乘积的奇偶性规则:

  • 奇数 × 奇数 = 奇数
  • 奇数 × 偶数 = 偶数
  • 偶数 × 偶数 = 偶数

因此,只有当n和m都是奇数时,乘积才是奇数,其他情况都是偶数。

代码实现

#include <iostream>  // 包含输入输出流库
using namespace std; // 使用标准命名空间

int n, m;           // 定义两个整型变量n和m

int main() {
    // 读取输入的两个数字
    cin >> n >> m;
    
    // 判断两数之和是否为奇数
    // 如果是奇数,直接输出"odd"
    if ((n + m) % 2 == 1) {
        cout << "odd" << endl;
    } 
    // 如果和为偶数,则进一步判断乘积
    else {
        // 判断乘积是否为奇数
        // 只有当n和m都是奇数时,乘积才是奇数
        if ((n * m) % 2 == 1) {
            cout << "odd2" << endl;
        } 
        // 其他情况乘积都是偶数
        else {
            cout << "even" << endl;
        }
    }
    
    return 0; // 程序正常结束
}

在这里插入图片描述

测试样例分析

以题目给出的测试样例为例:
输入:

3
2
  • 3是奇数,2是偶数
  • 和为3+2=5,是奇数
  • 因此输出"odd"

另一个测试样例:
输入:

3
5
  • 3和5都是奇数
  • 和为8,是偶数
  • 乘积为15,是奇数
  • 因此输出"odd2"

再一个测试样例:
输入:

2
4
  • 2和4都是偶数
  • 和为6,是偶数
  • 乘积为8,是偶数
  • 因此输出"even"

数学原理总结

这个问题本质上考察的是奇偶数的运算性质:

  1. 加法奇偶性:

    • 奇 ± 偶 = 奇
    • 奇 ± 奇 = 偶
    • 偶 ± 偶 = 偶
  2. 乘法奇偶性:

    • 奇 × 奇 = 奇
    • 奇 × 偶 = 偶
    • 偶 × 偶 = 偶

通过掌握这些基本数学性质,我们可以快速判断出各种情况下的结果,而不需要实际计算大数的和或积。

优化思路

虽然当前解法已经足够高效,但我们可以进一步优化判断条件:

  1. 和为奇数的条件可以简化为:(n % 2) != (m % 2)

    • 即一个数是奇数,另一个是偶数
  2. 乘积为奇数的条件可以简化为:(n % 2 == 1) && (m % 2 == 1)

    • 即两个数都是奇数

优化后的代码:


```css
#include <iostream>
using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    
    if ((n % 2) != (m % 2)) {
        cout << "odd" << endl;
    } else {
        if ((n % 2 == 1) && (m % 2 == 1)) {
            cout << "odd2" << endl;
        } else {
            cout << "even" << endl;
        }
    }
    
    return 0;
}

这种写法可能更直观地反映数学原理,但性能上与原解法相当。
![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/d4bc978bc20c4f129e87be757f6c7d87.png)

## 边界情况测试

为了确保程序的正确性,我们需要测试一些边界情况:

1. 最小值测试:
   - 输入:1, 1
     - 和为2(偶数)
     - 乘积为1(奇数)
     - 输出:"odd2"

2. 最大值测试:
   - 输入:100, 100
     - 和为200(偶数)
     - 乘积为10000(偶数)
     - 输出:"even"

3. 混合测试:
   - 输入:99, 100
     - 和为199(奇数)
     - 输出:"odd"

4. 零值测试(虽然题目范围是1-100,但可以扩展思考):
   - 输入:0, 1
     - 和为1(奇数)
     - 输出:"odd"

## 总结

这个问题通过简单的奇偶性判断就能解决,关键在于:
1. 理解题目要求的判断顺序(先判断和,再判断乘积)
2. 掌握奇偶数的基本运算性质
3. 使用模运算(%)来快速判断奇偶性


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

会叫的恐龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值