题目描述
珠心算是一种通过在脑中模拟算盘变化来完成快速运算的一种计算技术。珠心算训练,既能够开发智力,又能够为日常生活带来很多便利,因而在很多学校得到普及。
某学校的珠心算老师采用一种快速考察珠心算加法能力的测验方法。他随机生成一个正整数集合,集合中的数各不相同,然后要求学生回答:其中有多少个数,恰好等于集合中另外两个(不同的)数之和?
最近老师出了一些测验题,请你帮忙求出答案。
(本题目为2014NOIP普及T1)
输入输出格式
输入格式:
共两行,第一行包含一个整数nn,表示测试题中给出的正整数个数。
第二行有nn个正整数,每两个正整数之间用一个空格隔开,表示测试题中给出的正整数。
输出格式:
一个整数,表示测验题答案。
思路
这一题乍一看挺简单,用三次for循环就可以解决。但是里面有个坑:去重。
比如说输入5个数:1 2 3 4 5,这里的去重不是简单意义上的1,4和4,1的重复,而是1+4和2+3都等于5的重复。因此,我们使用两个数组a[]和b[],从a[]中取两数相加,与b[]中的元素比较,比如在a中选择1+4,在b中找到5,然后将5置零,这样在2+3的时候,b中不存在5,因此解决了去重问题。
#include <iostream>
using namespace std;
int main(){
int a[110]={0},b[110]={0};
int n,count=0;
cin>>n;
for(int i=0;i<n;i++){
cin>>a[i];
b[i]=a[i];
}
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
int t=a[i]+a[j];
for(int p=0;p<n;p++){
if(b[p]==t && p!=i && p!=j){
count++;
b[p]=0;
}
}
}
}
cout<<count;
return 0;
}
网友评论