题目链接
https://vjudge.net/contest/394826#problem/E
解题思路
先求出每两个数的和,再循环所有的数,判断是否存在等于两数和相反数的数且此数与求和两数不相等,那么这就是一组答案,将这组答案从小到大排序,得到所有情况,最后按要求输出最终答案。
AC代码
#include<bits/stdc++.h>
#define ll long long
using namespace std;
const int N=2010;
map<ll,ll> mp;
int n,m;
ll num[N];
struct ANS{
ll f[5];
}ans[1000009];
bool cmp(ANS a,ANS b){
if(a.f[0]!=b.f[0]) return a.f[0]<b.f[0];
else return a.f[1]<b.f[1];
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>num[i];
mp[num[i]]=1;
}
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++){
ll k=-(num[i]+num[j]);
if(k==num[i]||k==num[j]) continue;//要是此数与构成和的两数相等,不为其中一个答案
if(mp[k]==1){//存在
ans[m].f[0]=num[i];
ans[m].f[1]=num[j];
ans[m].f[2]=k;
sort(ans[m].f,ans[m].f+3);
m++;
}
}
sort(ans,ans+m,cmp);
if(m==0){cout<<"No Solution\n"<<endl;return 0;}
else
for(int i=0;i<m;i+=3)
cout<<ans[i].f[0]<<' '<<ans[i].f[1]<<' '<<ans[i].f[2]<<endl;
} 总结
由衷感觉这个代码的实现好牛*啊!
过一阵再附上4个数和为0的题解!(或许忘了)
4 Values whose Sum is 0(更新于20201105)
前言
我靠,我真的忘了,直到做到个4个数和为0的题,我隐约记得我好像做过3个数和为0的题,一看博客,居然留下了小尾巴。
题解链接
https://blog.nowcoder.net/n/050a3be9a6ee458cb0fb36beea233b81

京公网安备 11010502036488号