题意:对于给出的数列,有多少数可表示为另两数的和。
思路:先排个序,桶排思路。以一个数组储蓄所有出现的和。最后循环判断是否b[i]>0。
见代码:
#include<iostream> #include<cmath> #include<algorithm> #include<cstdio> #include<cstring> using namespace std; int n,sum,a[100001],b[100001]; bool cmp(int x,int y) { return x<y; } int main() { cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; sort(a+1,a+1+n,cmp); for(int i=1;i<=n;i++) { for(int j=1;j<i;j++) b[a[i]+a[j]]++; } for(int i=3;i<=n;i++) if(b[i]>0) sum++; cout<<sum; return 0; }