不需要这么算啊·-·
by wxj1860 @ 2022-02-10 15:56:47
太麻烦了吧
by wxj1860 @ 2022-02-10 15:57:09
输入之后,直接sort排一下,从第三个数a[3]开始暴力枚举。
枚举用一个for循环,i从1开始,到x/2-1结束。如果i和a[k](k>3)-i都在集合中,那ans++,做下一个
最后输出就好了
by wxj1860 @ 2022-02-10 16:01:30
```cpp
#include <bits/stdc++.h>
using namespace std;
int a[101],b[10001];
bool check(int x){
for(int i=1; i<=x/2; i++)
if(b[i]==1&&b[x-i]==1&&i!=x-i)return true;
return false;
}
int main(){
int n,ans=0;
cin>>n;
for(int i=1; i<=n; i++){
cin>>a[i];
b[a[i]]=1;
}
sort(a+1,a+n+1);
for(int i=3; i<=n; i++)if(check(a[i]))ans++;
cout<<ans;
return 0;
}
```
具体就这样,不过太暴力了
by wxj1860 @ 2022-02-10 16:03:21
@[wxj1860](/user/671859) 对欸 我没想到可以继续把枚举范围缩小到它的一半-1...而且判断方式确实麻烦了,这个架构刚开始是我看错题目以为同一个数的不同构成组合也算,后面没有整体动刀才臃肿了...谢谢!我这就改改...
不过c里没有sort可以用的,我才用的数组直接存起来...
by sduoooh @ 2022-02-10 18:53:32