解题思路:
1:先用桶排序的输入方法输入到数组中。
2:判断i+j
{
判断i和j是否存在
判断i+j是否存在
都存在将b数组++
}
3:如果b数组>=1就将计数器增加
【为什么b数组会大于等于1,因为一个数有不同的加法,如1+4=5和2+3=5,本来只需要加一个,但如果直接让计数器增加就会多一个,所以将结果一样的存入到b数组中,最后再判断就不会多加】
#include<bits/stdc++.h>
using namespace std;
bool a[20010];
int b[20010];
int main()
{
int n,x,sum=0;
cin>>n;
for(int i=1;i<=n;i++)//输入数据,值为1的下标数字存在集合中
{
cin>>x;
a[x]=1;
}
for(int i=1;i<=10000;i++)//枚举每个数字
{
if(a[i]==1)//如果在集合中
{
for(int j=i+1;j<=10000;j++)//枚举当前数字后面的所有数字
{
if(a[j]==1&&a[i+j]==1)//如果j位置数字在集合中,并且i+j的和也在集合中
b[i+j]++;//那么数组中对应的i+j下标的元素值累加
}
}
}
for(int i=1;i<=20010;i++)//遍历数组
{
if(b[i]>=1)//如果元素值不为0,说明存在这个数
sum++;
}
cout<<sum;
return 0;
}