洛谷-P2141珠心算测验

题目描述

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

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

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

(本题目为2014NOIP普及T1)

输入格式

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

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

输出格式

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

输入输出样例

输入 #1

1
2
4
1 2 3 4

输出 #1

1
2

说明/提示

【样例说明】

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

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

【数据说明】

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

题目大意: 就是在给定的一组数据中判断有多少个数的值可以用所给的数据相加得到。

分析:本体直接用暴力枚举,依次计算每两个数相加的结果,然后再所给数据中去查找;做本题的时候可以先对数据进行排序,可以避免大量重复计算和循环判断。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <bits/stdc++.h>
using namespace std;

int main()
{
int n;
cin >> n;
int a[n]; //存放输入的数组;
set <int> sum; //存放满足条件的数字;
for(int i=0;i<n;i++)
{
cin >> a[i];
}
sort(a,a+n);
for(int i=0;i<n-1;i++)
{

for(int j=i+1;j<n;j++)
{
int k;
while(a[i]==a[j]) j++;
int s = a[i]+a[j];
if(s>a[n-1]) break;
if(i<j) k=j;
else k=i;
for(;k<n;k++)
{
if(s==a[k])
{
sum.insert(s);
//cout << a[i] << "+" << a[j] << "=" << a[k] << endl;
}
}
}
}
cout << sum.size() <<endl;

}
-------------THE----END-------------

本文标题:洛谷-P2141珠心算测验

文章作者:Deng

发布时间:2019年08月05日 - 14:50

最后更新:2019年09月03日 - 20:44

原始链接:https://cydi.top/2019/08/05/P2141/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

觉得文章对您有帮助请我喝杯咖啡吧^_^
0%