在3个数字中找到第二小

时间:2018-01-06 14:49:04

标签: java algorithm sorting math

我收到了以下问题的作业:

这个问题要求我找到三个数字中的第二个,而不使用以下内容:

if-else statements, ternary operators or loops

并在Math.max()Math.min()的帮助下。

另外,我无法导入Scanner类以外的任何内容。

这是我迄今为止所做的事情:

Scanner N = new Scanner(System.in);
int a, b, c, sec;
System.out.print("Enter three numbers.\n>  ");
a = N.nextInt();
b = N.nextInt();
c = N.nextInt();
sec=(a>b)? (b>c)? b : c : (a>c)? a : c;
System.out.print(sec);

3 个答案:

答案 0 :(得分:4)

您可以通过从三个数字的总和中减去最小值和最大值来获得第二个最小数字。假设三个数字为abc

int min = Math.min(a, Math.min(b, c));
int max = Math.max(a, Math.max(b, c));
int res = a + b + c - min - max;

答案 1 :(得分:1)

如果有三个数字abc,您可以在一行代码中获得“第二小”:

int second = Math.max(Math.min(a,b), Math.min(Math.max(a,b),c));  

请注意,它仅使用Math.min()Math.max()来完成任务 它甚至不使用加法或减法!

以下是测试用例:

a = 7, b = 2, c = 8.
second = max(min(7,2), min(max(7,2),8)) = max(2, min(7,8)) = max(2, 7) = 7

答案 2 :(得分:0)

另一种解决方案是将数字添加到数组中并对其进行排序。索引1处的数字是倒数第二个。

  public static void main(String[] args) {
    Scanner N = new Scanner(System.in);
    int[] numbers = new int[3];
    System.out.print("Enter three numbers.\n>  ");
    numbers[0] = N.nextInt();
    numbers[1] = N.nextInt();
    numbers[2] = N.nextInt();
    Arrays.sort(numbers);
    System.out.print(numbers[1]);
  }