洛谷:P2141 珠心算测验精彩解析

洛谷:P2141 珠心算测验


题目描述

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

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

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

(本题目为2014NOIP普及T1)

输入格式

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

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

输出格式

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

输入输出样例

输入 #1

4
1 2 3 4

输出 #1

2

说明/提示
【样例说明】

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

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

【数据说明】

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


思路:定义两个数组A,B。 A记录所有两个数相加的和,B记录所有的两位数,然后在B数组搜索A数组里出现的所有和,出现过一次则次数++。

比如现在有: 1,2,3,4 四个数 那么A[6]={3,4,5,5,6,7} ,B[4]={1,2,3,4}
在B里面找A是否有相同,是则次数++,答案是:2


题解:

/**
* @author:气场五十米
* @data:2020/4/26
* @language:C++
* @CSDN: xingly.bolg.csdn.net
*/
#include
using namespace std;
int a[20010],b[20010]; 
int main()
{
	int x[110]={},n;
	cin>>n;
	for(int i=0;i<n;i++) 
	{
		cin>>x[i]; //读入所有数 
		b[x[i]]=1; //标记为出现过 
	}
	for(int i=0;i<n-1;i++)
	for(int j=i+1;j<n;j++)
	{
		a[x[i]+x[j]]++; //记录和出现几次
	} 
	int ans=0;
	for(int i=0;i<=20000;i++)
	{
		if(b[i]&&a[i]>0) ans++;   //b[i]表示他们的和也在所有数中,a[i]>0表示他们的和出现了,可能不止一次
	} 
	cout<<ans;
    return 0;
}

你可能感兴趣的:(洛谷刷题,ACM,气场五十米)