这道题还是有坑点的,我很容易就跳了进去。注意题目的描述“其中有多少个数,恰好等于集合中另外两个(不同的)数之和?”那么关于重复的问题,就不仅仅是1+4=5和4+1=5了,还有1+4=5和2+3=5,这两种加法的求和结果都是5,应该只是一种情况!
解决方法就是用数组b和a一一对应,从数组a中无重复取出两个数相加求和,再从b中遍历数组,找到与求和结果相同的数后计数+1!!!并且!!!将数组b中的这个数清空为0,避免下一次检索时再次被找到(那么清空为0就没问题了)
总结就是从数组a中取两个加数,从b中取求和结果
#include<iostream>
using namespace std;
int main()
{
long long a[101],b[101];
int n,cnt=0;
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
b[i]=a[i];//数组b与a一一对应
}
for(int i=1;i<=n-1;i++)
{
for(int j=i+1;j<=n;j++)
{
int sum=a[i]+a[j];//从a中取不重复的两个数求和
for(int k=1;k<=n;k++)
{
if((sum==b[k])&&(k!=i)&&(k!=j))//题意中加数都是正整数
{
//cout<<b[i]<<"+"<<b[j]<<"="<<b[k]<<endl;
cnt++;
b[k]=0;//清空b中这个数
}
}
}
}
cout<<cnt;
return 0;
}