一、题目
二、分析
输入的七个数中一定存在A、B、C,故可循环枚举。
枚举A、B、C时,将A,B,C,A+B,A+C,B+C,A+B+C存放与一个数组,排序后对比输入的数组,若数字完全相同,则说明当前枚举为答案。
于是我这么写了:
#include<bits/stdc++.h>
using namespace std;
const int N=10;
long long a[N];
long long b[N];
int n=7;
bool If(long long A,long long B,long long C)
{
b[1]=A,b[2]=B,b[3]=C;
b[4]=A+B,b[5]=A+C,b[6]=B+C;
b[7]=A+B+C;
sort(b+1,b+1+n);
for(int i=1;i<=n;i++)
if(a[i]!=b[i])
return false;
return true;
}
int main()
{
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
for(int k=1;k<=n;k++)
{
if(i!=j&&j!=k&&i!=k)
{
long long A=a[i],B=a[j],C=a[k];
if(If(A,B,C))
{
cout<<A<<" "<<B<<" "<<C<<endl;
return 0;
}
}
}
}
}
return 0;
}
后面发现我漏掉一个条件:A<=B<=C (其实是看了其他题解才发现的)
根据这个条件,可以在对输入的数据进行排序后确定A,B(在最左侧),A+B+C(在最右侧),接着可以推出C的具体值。
三、代码
#include<bits/stdc++.h>
using namespace std;
const int N=10;
long long a[N];
int n=7;
int main()
{
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+1+n);
cout<<a[1]<<" "<<a[2]<<" "<<a[7]-a[1]-a[2]<<endl;
return 0;
}