有三個非負整數a、b、 C,現按隨機順序給出它們的兩兩和以及總和4個整數,即a+b、 a+c、b+c、 a+b+c, 注意,給出的4個數的順序是隨機的,請根據這四個數求出a、b、c是多少?
[輸入形式]
輸入為一-行4個正整數, x1、 x2、x3、 x4 (0≤xi≤10^9) ,表示a+b、a+c、b+c、a+ b+c結果的隨機順序的值,輸入保證能求出結果。
[輸出形式]
輸出為一-行,以非遞減的方式輸出a、b、 c, 注意a、b、c可能相等。
[樣例輸入1]
3 6 5 4
[樣例輸出1]
1 2 3
算法思路:從用戶輸入的四個數中,優選選出最大的那個數,因為它肯定是a+b+c
仔細觀察:
(a+b+c) - (a+b) = c
(a+b+c) - (a+c) = b
(a+b+c) - (b+c) = a
(a+b+c) - (a+b+c) = 0
如果找到最大的那個數,然后依次和輸入的那四個數相減,得出的新的四個數就是a,b,c,0,至于是誰是誰都不確定,此時需要將是個數存入到數組中去,然后由小到大排序,跳過0,從第二個數開始輸出即可。
代碼如下:
#include <iostream>
#include<algorithm>
using namespace std;int main()
{int m,n,p,q,M,x,y,z,k,a[4];//M用于存儲最大的那個數,即a+b+ccin>>m>>n>>p>>q;M=max(max(m,n),max(p,q));//M此時為a+b+cx=M-m;y=M-n;z=M-p;k=M-q;a[0]=x,a[1]=y,a[2]=z,a[3]=k;//分別將a,b,c,0存入數組中去sort(a,a+4);//從小到大排序cout<<a[1]<<" "<<a[2]<<" "<<a[3]<<endl;//a[0]必為0,不輸出,從a[1]開始依次輸出return 0;
}
效果如下: