蒜头君给定一个正整数序列,判断其中有多少个数,等于数列中其他两个数的和。比如,对于数列 1 2 3 4,这个问题的答案就是 2,因为 3 = 2 + 1, 4 = 1 + 3。
输入格式
共两行,第一行是数列中数的个数 n(1≤n≤100),第二行是由 n 个不大于 10000 的正整数组成的数列,相邻两个整数之间用单个空格隔开。
输出格式
一个整数,即数列中等于其他两个数之和的数的个数。
Sample Input
4
1 2 3 4
Sample Output
2
思路
此题中,一个数等于另外两个数之和,这个数只能算一次(多组数相加都能得到这个数,只算一次)例如:
{
5
1 2 2 3 4
2
注:
编号 0,1,;编号 0,2;相加1+2=3;只算一次;
编号1,2;相加 2+2=4;第二次;
}
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,s[111],x,book[11111];
int main() {
scanf("%d",&n);
memset(s,0,sizeof(s));
memset(book,0,sizeof(book));
for(int i=1; i<=n; i++) {
scanf("%d",&s[i]);
}
sort(s+1,s+1+n);
int sum=0;
for(int i=1;i<=n;i++)
{
int flag=0;
for(int j=1;j<=n;j++){
for(int k=1;k<=n;k++){
if(s[i]==s[j]+s[k]&&j!=i&&j!=k&&i!=k){
flag=1;
sum++;
break;
}
}
if(flag==1) break;
}
}
printf("%d\n",sum);
}