Polycarp has guessed three positive integers \(a\), \(b\) and \(c\). He keeps these numbers in secret, but he writes down four numbers on a board in arbitrary order — their pairwise sums (three numbers) and sum of all three numbers (one number). So, there are four numbers on a board in random order: \(a+b\), \(a+c\), \(b+c\) and \(a+b+c\).ios
You have to guess three numbers \(a\), \(b\) and \(c\) using given numbers. Print three guessed integers in any order.c++
Pay attention that some given numbers \(a\), \(b\) and \(c\) can be equal (it is also possible that \(a=b=c\)).数组
The only line of the input contains four positive integers \(x_{1}\),\(x_{2}\),\(x_{3}\),\(x_{4}\)(\(2\)≤\(x_{i}\)≤\(10^{9}\)) — numbers written on a board in random order. It is guaranteed that the answer exists for the given number \(x_{1}\),\(x_{2}\),\(x_{3}\),\(x_{4}\).dom
Print such positive integers \(a\), \(b\) and \(c\) that four numbers written on a board are values \(a+b\), \(a+c\), \(b+c\) and \(a+b+c\) written in some order. Print \(a\), \(b\) and \(c\) in any order. If there are several answers, you can print any. It is guaranteed that the answer exists.函数
3 6 5 4spa
2 1 3code
40 40 40 60排序
20 20 20three
201 101 101 200ip
1 100 100
简化版题意:
有三个正整数\(a\), \(b\), \(c\), 如今给定\(x_{1}\) \(=\) \(a + b\), \(x_{2}\) \(=\) \(a +c\), \(x_{3}\) \(=\) \(b + c\), \(x_{4}\) \(=\) \(a + b + c\)。 请求出\(a\), \(b\), \(c\)分别是多少。
这是一道数论题。
咱们先整理一下题面告诉咱们的信息:
\(a\)、\(b\)、\(c\)是三个正整数;
咱们会输入4个乱序的数字:\(x1\)、\(x2\)、\(x3\)、\(x4\);
\(x_{1}\) = \(a\) + \(b\) , \(x_{2}\) = \(a\) + \(c\) , \(x_{3}\) = \(b\) + \(c\) , \(x_{4}\) = \(a\) + \(b\) + \(c\)。
∵\(a\)、\(b\)、\(c\)均>\(0\).
∴\(x_{4}\)是这四个数中最大的数。
至于如何求出\(a\)、\(b\)、\(c\),则能够:
用\(x_{4} - x_{1}\)获得\(c\),用\(x_{4} - x_{2}\)获得\(b\),用\(x_{4} - x_{3}\)获得\(a\),最后按顺序输出这三个数便可。
注意:咱们须要开一个数组\(x\)[]来存储\(x_{1}\)、\(x_{2}\)、\(x_{3}\)、\(x_{4}\),由于这样便于咱们排序(能够直接调用\(c++\)库函数\(sort\),但要开头文件\(algorithm\)),并且能够更好地帮助咱们寻找到\(a\)、\(b\)、\(c\)。
#include <iostream> #include <cstdio> #include <cstdlib> #include <cstring> #include <algorithm> #include <cmath>//头文件准备 using namespace std;//使用标准名字空间 inline int gi()//快速读入,不解释 { int f = 1, x = 0; char c = getchar(); while (c < '0' || c > '9') { if (c == '-') f = -1; c = getchar(); } while (c >= '0' && c <= '9') { x = x * 10 + c - '0'; c = getchar(); } return f * x; } int a, b, c, x[5];//a、b、c和x数组的意义同分析 inline void init()//分别输入这四个数 { x[1] = gi(), x[2] = gi(), x[3] = gi(), x[4] = gi(); } inline void solve()//将x数组从小到大排序 { sort(x + 1, x + 1 + 4);//1和4是指从x[1]到x[4]从小到大排序 } inline void output()//输出的自函数 { printf("%d %d %d\n", x[4] - x[1], x[4] - x[2], x[4] - x[3]);//分别输出a、b、c。 } int main()//进入干净整洁的主函数 { init();//输入 solve();//排序解决问题 output();//输出 return 0;//养成return 0的好习惯 }