NewCoder:计算糖果

    xiaoxiao2025-05-26  92

    文章目录

    题目来源题目描述输入描述:输出描述: 解题思路实现代码

    题目来源

    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); } }
    最新回复(0)