我收到了以下问题的作业:
这个问题要求我找到三个数字中的第二个,而不使用以下内容:
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);
答案 0 :(得分:4)
您可以通过从三个数字的总和中减去最小值和最大值来获得第二个最小数字。假设三个数字为a
,b
和c
。
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)
如果有三个数字a
,b
和c
,您可以在一行代码中获得“第二小”:
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]);
}