首页 文章

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

提问于
浏览
2

嗨,我正在研究一个java代码,以找到最接近的3个数字 .

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

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

Sample Input 1:

650 
890 
345 
400

Sample Output 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

    您的解决方案的问题是它只比较数字的值 . 如果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");
    }
    

相关问题