如何在java中找到最接近的给定数字

时间:2018-03-06 07:07:32

标签: java

您好我正在编写一个java代码,以找到最接近的3个数字。

输入格式: 输入由4个整数组成。 前3个整数值对应于P1,P2,P3,分别在Khaldiya的3个营地C1,C2,C3中可容纳的难民人数。 最后一项输入对应于一个地方的平民人数。

输出格式: 打印一个阵营名称C1,C2或C3,其中可以容纳来自当地的给定数量的平民。 有关格式规范,请参阅示例输入和输出。

示例输入1:

650 
890 
345 
400 

示例输出1:

C1 

我写了一个没有通过所有测试用例的代码。任何人都可以在我错的地方帮助我吗?

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner s=new Scanner(System.in);
    int p1,p2,p3,n;
    int diff = 0;
    p1=s.nextInt();
    p2=s.nextInt();
    p3=s.nextInt();
    n=s.nextInt();
    if((n<p1)||(n>p2)&&(n>p3))
        System.out.println("C1");
    else if((n<p2)||(n>p1)&&(n>p3))
        System.out.println("C2");
    else if((n<p3)||(n>p2)&&(n>p1)) 
        System.out.println("C3");
    }

}

1 个答案:

答案 0 :(得分:0)

您的解决方案的问题在于它只比较数字的值。如果p1,p2和p3都大于n,但p3最接近怎么办?当你输出C3时,你的代码仍会输出C1。

我认为你应该比较每个p值和n之间的差异。

int p1Diff = p1 - n;
int p2Diff = p2 - n;
int p3Diff = p3 - n;

然后将负差异设置为Integer.MAX_VALUE

if (p1Diff < 0) {
    p1Diff = Integer.MAX_VALUE;
}
// ...

然后你可以找到以上三个变量中最小的一个:

if (p1Diff < p2Diff && p1Diff < p3Diff) {
    System.out.println("C1");
}
if (p2Diff < p1Diff && p2Diff < p3Diff) {
    System.out.println("C2");
}
if (p3Diff < p1Diff && p3Diff < p2Diff) {
    System.out.println("C3");
}