题解:洛谷 P2141 [NOIP 2014 普及组] 珠心算测验
【题目来源】
洛谷:P2141 [NOIP 2014 普及组] 珠心算测验 - 洛谷
【题目描述】
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
最近老师出了一些测验题,请你帮忙求出答案。
【输入】
共两行,第一行包含一个整数 \(n\),表示测试题中给出的正整数个数。
第二行有 \(n\) 个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
【输出】
一个整数,表示测验题答案。
【输入样例】
4
1 2 3 4
【输出样例】
2
【算法标签】
《洛谷 P2141 珠心算测验》 #模拟# #枚举# #NOIP普及组# #2014#
【代码详解】
#include <bits/stdc++.h>
using namespace std;
int n, ans;
int a[105], sum[20005];
int main()
{
cin >> n; // 输入n
for (int i=1; i<=n; i++) { // 输入n个数
cin >> a[i];
}
for (int i=1; i<=n; i++) { // 双重for循环枚举2个数
for (int j=1; j<=n; j++) {
if (i==j) continue; // 不同的2个数
sum[a[i]+a[j]] = 1; // 计算2个数的和,并在桶数组sum中置为1
}
}
for (int i=1; i<=n; i++) { // 枚举n个数
if (sum[a[i]]) ans++; // 如果桶数组中对应的值为1,说明是由2个数之和构成
}
cout << ans << endl;
return 0;
}
【运行结果】
4
1 2 3 4
2
浙公网安备 33010602011771号