文章目录
题目来源题目描述输入描述:输出描述:
解题思路实现代码
题目来源
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;
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;
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
);
}
}