如何解决java代码仅使用6个步骤即可找到5个不是来自数组中的最大和最小数字,每一步都需要在2个数字之间交换
我想使用 2 个数字格式之间的交换,以便从用户给出的 5 个数字中找到最大和最小的数字。 我只想使用 6 个步骤,但我每次都达到了更多。对如何修复我的代码有什么建议吗?
Scanner myScanner = new Scanner(System.in);
int a = myScanner.nextInt();
int b = myScanner.nextInt();
int c = myScanner.nextInt();
int d = myScanner.nextInt();
int e = myScanner.nextInt();
int tmp;
if (a > b) {
tmp = b;
b = a;
a = tmp;
}
if (c > d) {
tmp = c;
c = d;
d = tmp;
}
if (a > c) {
tmp = a;
a = c;
c = tmp;
}
if (b > d) {
tmp = b;
b = d;
d = tmp;
}
if (d > e) {
tmp = d;
d = e;
e = tmp;
}
if (c > e) {
tmp = c;
c = e;
e = tmp;
}
if (b > e) {
tmp = b;
b = e;
e = tmp;
}
System.out.println(a);
System.out.print(e);
解决方法
您有一个重复的代码片段。如果您删除多余的代码,这将起作用。
import java.util.Scanner;
public class UshtrimeRekursive {
public static void main(String[] args){
Scanner myScanner = new Scanner(System.in);
int a = myScanner.nextInt();
int b = myScanner.nextInt();
int c = myScanner.nextInt();
int d = myScanner.nextInt();
int e = myScanner.nextInt();
int tmp;
if (a > b) {
tmp = b;
b = a;
a = tmp;
}
if (c > d) {
tmp = c;
c = d;
d = tmp;
}
if (a > c) {
tmp = a;
a = c;
c = tmp;
}
// if (b > d) {
// tmp = b;
// b = d;
// d = tmp;
// }
if (d > e) {
tmp = d;
d = e;
e = tmp;
}
if (c > e) {
tmp = c;
c = e;
e = tmp;
}
if (b > e) {
tmp = b;
b = e;
e = tmp;
}
System.out.println(a);
System.out.print(e);
}
}
,
我不确定以下代码是否可以满足“步骤”数量的要求,因为它包含 7 个交换操作,但实际上只会发生 3 或 4 个交换。此外,交换是在没有临时变量的情况下使用基于 XOR 的单行实现的:
Random random = new Random();
// generate random values instead of user input
int a = random.nextInt(1000);
int b = random.nextInt(1000);
int c = random.nextInt(1000);
int d = random.nextInt(1000);
int e = random.nextInt(1000);
System.out.println(Arrays.asList(a,b,c,d,e));
if (e < a) {
a = (e ^= a ^= e) ^ a;
}
if (b < a) {
a = (b ^= a ^= b) ^ a;
} else if (b > e) {
b = (e ^= b ^= e) ^ b;
}
if (c < a) {
a = (c ^= a ^= c) ^ a;
} else if (c > e) {
c = (e ^= c ^= e) ^ c;
}
if (d < a) {
a = (d ^= a ^= d) ^ a;
} else if (d > e) {
d = (e ^= d ^= e) ^ d;
}
System.out.println("min = " + a);
System.out.println("max = " + e);
System.out.println(Arrays.asList(a,e));
示例输出
[629,941,339,496,366]
min = 339
max = 941
[339,629,366,941]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。