速算加法能力测试 - C++ 代码实现

问题描述

一个数学老师采用一种快速考察速算加法能力的测验方法。他随机生成一个'正整数'集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

输入格式

共两行,第一行包含一个整数 'n',表示测试题中给出的'正整数'个数。

第二行有 'n' 个'正整数',每两个'正整数'之间用一个空格隔开,表示测试题中给出的'正整数'。

输出格式

一个整数,表示测验题答案。

示例

示例输入

4
1 2 3 4

示例输出

2

解释

1 2 3 4 任选两个相加的和可以是 3 4 5 6 7。

只有 3 和 4 满足条件,故满足测试要求的答案为 2。

注意,加数和被加数必须是集合中的两个不同的数。

C++ 代码

#include <iostream>
#include <unordered_set>
using namespace std;

int main() {
    int n;
    cin >> n;
    
    unordered_set<int> nums;
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        nums.insert(num);
    }
    
    int count = 0;
    for (auto it1 = nums.begin(); it1 != nums.end(); it1++) {
        for (auto it2 = next(it1); it2 != nums.end(); it2++) {
            int sum = *it1 + *it2;
            if (nums.find(sum) != nums.end()) {
                count++;
            }
        }
    }
    
    cout << count << endl;
    
    return 0;
}

代码说明:

  • 使用 unordered_set 数据结构来存储输入的数字,方便快速查找。
  • 采用双重循环遍历所有数字对,计算它们的和。
  • 使用 find 方法判断和是否在集合中,统计满足条件的数字个数。

优化建议:

  • 可以使用更精简的循环遍历方式,例如使用 for (auto it1 : nums) 遍历集合。
  • 可以考虑使用其他数据结构,例如 mapvector,根据实际情况选择更适合的数据结构。
速算加法能力测试 - C++ 代码实现

原文地址: https://www.cveoy.top/t/topic/phOy 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录