【洛谷 P2141】[NOIP2014 普及组] 珠心算测验 题解(集合+多重循环)

简介: **NOIP2014普及组的珠心算测验题要求参赛者找出给定集合中多少个数可表示为其他两个不同数的和。输入含n个正整数,输出满足条件的数的个数。样例输入4个数,输出2,因1+2=3且1+3=4。代码利用集合存储和,遍历所有数对组合,当找到匹配和时插入集合,最后输出集合大小。注意数据规模为n≤100,数不超过10,000。**

[NOIP2014 普及组] 珠心算测验

题目描述

珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。

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

最近老师出了一些测验题,请你帮忙求出答案。

(本题目为 2014NOIP 普及 T1)

输入格式

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

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

输出格式

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

样例 #1

样例输入 #1

4
1 2 3 4

样例输出 #1

2

提示

【样例说明】

由 $1+2=3,1+3=4$,故满足测试要求的答案为 $2$。

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

【数据说明】

对于 $100\%$ 的数据,$3 \leq n \leq 100$,测验题给出的正整数大小不超过 $10,000$。

思路

用集合存储符合条件的和的值,输出该集合元素个数即可。

AC代码

#include <iostream>
#include <set>
#define AUTHOR "HEX9CF"
using namespace std;

int main()
{
   
    int n;
    int cnt = 0;
    set<int> num;
    set<int> sum;
    cin >> n;
    for (int i = 0; i < n; i++)
    {
   
        int in;
        cin >> in;
        num.insert(in);
    }
    for (set<int>::iterator it1 = num.begin(); it1 != num.end(); it1++)
    {
   
        for (set<int>::iterator it2 = it1; it2 != num.end(); it2++)
        {
   
            for (set<int>::iterator it3 = num.begin(); it3 != num.end(); it3++)
            {
   
                if (*it1 + *it2 == *it3 && it1 != it2)
                {
   
                    sum.insert(*it3);
                }
            }
        }
    }
    cout << sum.size() << endl;
    return 0;
}
目录
相关文章
【2001NOIP普及组】T3. 求先序排列 试题解析
【2001NOIP普及组】T3. 求先序排列 试题解析
|
6月前
【洛谷 P1980】[NOIP2013 普及组] 计数问题 题解(取余)
NOIP2013普及组计数问题,求区间[1, n]内数字x出现的次数。输入为n和x,输出x的出现次数。样例输入11 1,输出4。代码通过逐位检查每个数是否等于x来计数,适用于$n\leq10^6$,$0\leq x\leq 9$的情况。
72 0
|
6月前
|
C++
【洛谷 P1044】[NOIP2003 普及组] 栈 题解(递归+记忆化搜索)
**NOIP2003普及组栈问题**:给定操作数序列1到n,仅允许push(进栈)和pop(出栈)操作。目标是计算所有可能的输出序列总数。输入包含一个整数n(1≤n≤18)。示例输入3,输出5。当队列空时返回1,栈空则只能入栈,栈非空时可入栈或出栈。AC C++代码利用记忆化搜索求解。
81 1
|
6月前
|
C++
【洛谷 P1059】[NOIP2006 普及组] 明明的随机数 题解(集合)
**NOIP2006普及组题目**,明明需生成不重复的1-1000间随机整数,输入含两行:第一行是整数N(≤100),第二行是N个随机数。输出两行,第一行是唯一数的个数M,第二行是排序后的唯一数。示例:输入10个数含重复,输出8个不同数排序后结果。解题方法:利用C++的`set`进行去重和排序。
70 0
|
6月前
|
C++
【洛谷 P1047】[NOIP2005 普及组] 校门外的树 题解(位集合)
**NOIP2005普及组问题:**给定长度为$l$的马路,上面等距种植着树,需移除位于建造地铁区域的树。输入包含马路长度和区域数,以及各区域起止点,输出移树后剩余树的数量。样例输入:$l=500$, $m=3$,输出:$298$。$20\%$数据无区域重合,$1 \leq l \leq 10^4$,$1 \leq m \leq 100$。解决方案利用位集合(bitset)表示树的状态,遍历区域将树设为0,最后统计1的数量。AC代码使用C++实现。
32 0
|
6月前
【洛谷 P1036】[NOIP2002 普及组] 选数 题解(深度优先搜索+判断质数+枚举子集)
**NOIP2002普及组选数问题**:给定$n$个整数和一个整数$k$,需找出所有$k$个数的组合,计算它们的和为素数的种类数。输入包含$n$和$k$,以及$n$个整数;输出是符合条件的组合数。例如,对于输入`4 3`和数组`[3, 7, 12, 19]`,输出为`1`。代码使用递归枚举子集并检查质数的方法。
97 0
|
6月前
【洛谷 P1035】[NOIP2002 普及组] 级数求和 题解(循环)
**NOIP2002普及组题目:求级数$S_n=1+\frac{1}{2}+\frac{1}{3}+...+\frac{1}{n}$超过$k$的最小$n$。给定$1\leq k\leq 15$,输出满足$S_n&gt;k$的$n$。输入$1$个整数$k$,输出相应$n$。例如,输入$1$,输出$2$。代码中使用double确保精度,通过累加求和判断条件找到$n$。**
46 0
|
6月前
|
C++
【洛谷 P1075】[NOIP2012 普及组] 质因数分解 题解(判断质数)
NOIP2012普及组题目,给定合数$n$由两个不同质数乘积组成,求较大质数。输入一个正整数$n$,输出较大质因子。例如输入21,输出7。代码使用C++,通过循环和质数判断找到能整除$n$的质数,再求另一个质数,并输出较大者。
83 0
|
6月前
【洛谷 P2669】[NOIP2015 普及组] 金币 题解(循环)
`NOIP2015`普及组题目,骑士按周期领金币:第一天1枚,随后$n$天每天$n$枚,然后$n+1$天每天$n+1$枚。给定天数$k$,求总金币数。输入$k$,输出金币总数。样例输入6,输出14;输入1000,输出29820。代码使用循环和变量控制周期,累计金币数。
134 0
|
6月前
|
机器学习/深度学习 存储
【洛谷 P1028】[NOIP2001 普及组] 数的计算 题解(递归)
**NOIP2001普及组数的计算**:给定自然数\( n \),构造数列,新数不超过序列最后一项一半。求合法数列个数。输入\( n \)(\(1 \leq n \leq 10^3\))。样例:输入6,输出6。递归解决,代码中定义函数`f`实现递归计算,总和存储在`cnt`中,最后输出。
59 0
下一篇
DataWorks