题目来源
https://www.nowcoder.com/questionTerminal/02d8d42b197646a5bbd0a98785bb3a34
题目描述
A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:
A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。
输入描述:
输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。 范围均在-30到30之间(闭区间)。
输出描述:
输出为一行,如果存在满足的整数A,B,C则按顺序输出A,B,C,用空格隔开,行末无空格。 如果不存在这样的整数A,B,C,则输出No
示例1
输入
1 -2 3 4
输出
2 1 3
解题思路
-
首先,题目本身是数学上的联立方程求唯一解问题
-
设
A - B=y1,B - C =y2,A + B=y3,B + C=y4
-
可得:
A = (y1 + y3) / 2;
B = (y2 + y4) / 2;
或B = (y3 - y1) / 2;
C = (y4 - y2) / 2;
注: 由题意可得,A B C
都需要是正数才有解,否则就算解唯一,也不能有输出。
实现代码
import java.util.*;
public class Title1{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
float A,B,C;
int y1=0,y2=0,y3=0,y4=0;
//输入一行只有4个整数,没有必要用数组处理
while(sc.hasNextInt()) {
y1 = sc.nextInt();
y2 = sc.nextInt();
y3 = sc.nextInt();
y4 = sc.nextInt();
}
A =(y1 + y3) / 2F;
B =(y2 + y4) / 2F;
C =(y4 - y2) / 2F;
//满足A B C都不为浮点数才输出
if(A !=(y1 + y3)/2) {
System.out.println("No");
return;
}
if(B !=(y2 + y4) / 2 || B !=(y3 - y1) / 2 ) {
System.out.println("No");
return;
}
if(C != (y4 - y2) / 2) {
System.out.println("No");
return;
}
System.out.println((int)A+" " + (int)B+" " + (int)C);
}
}