速算加法挑战:C++ 代码实现

某学校的数学老师采用一种快速考察速算加法能力的测验方法。

他随机生成一个'正整数'集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?

题目描述

输入格式

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

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

输出格式

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

样例

样例输入 #1

4
1 2 3 4

样例输出 #1

2

提示

【样例说明】

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

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

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

【数据说明】

对于 20% 的数据,所有数字都相等。

对于 70% 的数据,有 3 ≤ n ≤ 100。

对于 100% 的数据,3 ≤ n ≤ 1000,'正整数'大小不超过 10,000。

C++ 代码实现

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

int main() {
    int n;
    cin >> n;
    
    unordered_set<int> numSet;
    for (int i = 0; i < n; i++) {
        int num;
        cin >> num;
        numSet.insert(num);
    }
    
    int count = 0;
    for (auto it = numSet.begin(); it != numSet.end(); it++) {
        for (auto jt = it; jt != numSet.end(); jt++) {
            int sum = *it + *jt;
            if (numSet.count(sum) > 0 && sum != *it && sum != *jt) {
                count++;
            }
        }
    }
    
    cout << count << endl;
    
    return 0;
}

代码解释

  1. 使用 unordered_set 来存储输入的'正整数',方便快速查找是否存在某个数字。
  2. 遍历集合,对于每个数字,再遍历一次集合,计算两个数字的和。
  3. 如果和在集合中存在,且和不等于当前两个数字,则计数器加 1。
  4. 最终输出计数器的值。

代码优势

  • 使用 unordered_set 存储数字,查找效率高,时间复杂度为 O(1)。
  • 代码简洁易懂,易于理解和维护。

其他实现方法

除了使用 unordered_set,还可以使用其他数据结构,例如 vectormap 来实现。但是,unordered_set 在查找效率方面更优,更适合本题的场景。

总结

本文提供了一个 C++ 代码实现,用于解决速算加法挑战问题。该代码利用 unordered_set 来存储和查找数字,提高了代码效率。希望本文能够帮助读者更好地理解和解决类似问题。

速算加法挑战:C++ 代码实现

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

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