您好我正在编写一个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");
}
}
答案 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");
}