P2141 [NOIP2014 普及组] 珠心算测验

Posted Kunkun只喝怡宝

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了P2141 [NOIP2014 普及组] 珠心算测验相关的知识,希望对你有一定的参考价值。

题目描述

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

输入格式

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

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

输出格式

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

代码

本题有一个需要注意的地方就是当一个数可以分为两组以上不同两个数的和时,只能算一个数,例6=1+5,6=2+4。

#include<bits/stdc++.h>

using namespace std;

int f(int x,int y,int z);
char str[10010];
int main(){
	int n,a[100],i,j,k,cnt=0;
	memset(str,'0',sizeof(str));
	cin>>n;
	for(i=0;i<n;i++)
		cin>>a[i];
	for(i=0;i<=n-3;i++)
		for(j=i+1;j<=n-2;j++)
			for(k=j+1;k<=n-1;k++){
				if(f(a[i],a[j],a[k])==1){
					printf("%d %d %d\\n",a[i],a[j],a[k]);
					cnt++;
				} 
			}
	cout<<cnt;
	return 0;
}
int f(int x,int y,int z){
	int t;
	if(x>y){
		t=x;x=y;y=t;
	}
	if(y>z){
		t=y;y=z;z=t;
	}
	if(x>y){
		t=x;x=y;y=t;
	}
	if(x+y==z&&str[z]=='0'){
		str[z]='1';
		return 1;
	}
		
	return 0;
}

以上是关于P2141 [NOIP2014 普及组] 珠心算测验的主要内容,如果未能解决你的问题,请参考以下文章

珠心算测验(NOIP2014 普及组第一题)

noip2014普及组

P2141 珠心算测验

洛谷 P2141 珠心算测验

P2141 珠心算测验

比例简化(NOIP2014 普及组第二题)