Java,无数组或循环的第二大数量
我正在尝试创建一个程序,它返回第二个最大值,而不使用数组或循环。这似乎是不可能的,我考虑过计算最大数,然后创建一个没有最大数的新方法,但我不知道怎么做Java,无数组或循环的第二大数量,java,max,Java,Max,我正在尝试创建一个程序,它返回第二个最大值,而不使用数组或循环。这似乎是不可能的,我考虑过计算最大数,然后创建一个没有最大数的新方法,但我不知道怎么做 public class Program { public static double max10(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10) {
public class Program {
public static double max10(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10) {
double r1,r2,r3,r4,r5,r6,r7,r8,r9;
r1= max2(n1,n2);
r2= max2(n3,n4);
r3= max2(n5,n6);
r4= max2(n7,n8);
r5= max2(n9,n10);
r6= max2(r1, r2);
r7= max2(r3, r4);
r8= max2(r6, r7);
r9= max2( r8, r5 );
return max2( r9, r5 );
}
public static double max2 (double n1, double n2) {
return n1>=n2 ? n1 : n2;
}
public static void main(String[] args) {
System.out.println(max10(1,2,3,4,5,6,7,8,9,10)==10);
System.out.println(max10(1,2,3,4,5,45,7,8,9,10)==45);
System.out.println(max10(1,2,3,4,5,6,7,8,10,10)==10);
}
}
有什么窍门吗
public static double getSecondMaxValue(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10){
double maxValue = max10(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10)
double secondMaxValue = 0.0;
if(maxValue == n1)
secondMaxValue = max9(double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10);
else if (maxValue == n2)
secondMaxValue = max9(double n1, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10);
else if (maxValue == n3)
secondMaxValue = max9(double n1, double n2, double n4,double n5, double n6, double n7, double n8, double n9, double n10);
...
...
else if (maxValue == n10)
secondMaxValue = max9(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9);
return secondMaxValue;
}
public static double max9(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9) {
double r1,r2,r3,r4,r5,r6,r7,r8,r9;
r1= max2(n1,n2);
r2= max2(n3,n4);
r3= max2(n5,n6);
r4= max2(n7,n8);
r5= n9;
r6= max2(r1, r2);
r7= max2(r3, r4);
r8= max2(r6, r7);
r9= max2( r8, r5 );
return max2( r9, r5 );
}
public static double getSecondMaxValue(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10){
double maxValue = max10(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10)
double secondMaxValue = 0.0;
if(maxValue == n1)
secondMaxValue = max9(double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10);
else if (maxValue == n2)
secondMaxValue = max9(double n1, double n3, double n4,double n5, double n6, double n7, double n8, double n9, double n10);
else if (maxValue == n3)
secondMaxValue = max9(double n1, double n2, double n4,double n5, double n6, double n7, double n8, double n9, double n10);
...
...
else if (maxValue == n10)
secondMaxValue = max9(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9);
return secondMaxValue;
}
public static double max9(double n1, double n2, double n3, double n4,double n5, double n6, double n7, double n8, double n9) {
double r1,r2,r3,r4,r5,r6,r7,r8,r9;
r1= max2(n1,n2);
r2= max2(n3,n4);
r3= max2(n5,n6);
r4= max2(n7,n8);
r5= n9;
r6= max2(r1, r2);
r7= max2(r3, r4);
r8= max2(r6, r7);
r9= max2( r8, r5 );
return max2( r9, r5 );
}
解决方案是将10个变量减少为最大值对。 10个值将得到5对最大值 从5对最大值,我们将其减少到2对最大值+1值 这只给出了3个值-最大值、第二大值和随机值 对于3个值,为了得到第二大值,我们将所有3个值相加,并从中扣除最大值和最小值:
public static double max10(double n1, double n2, double n3, double n4, double n5, double n6, double n7, double n8, double n9, double n10){
double a = max( max(n1, n2), max(n3, n4));
double b = max( max(n5, n6), max(n7, n8));
double c = max(n9, n10);
return (a + b + c) - max(max(a, b), c) - min(min(a, b), c);
}
public static double min (double n1, double n2) {
return n1<n2 ? n1 : n2;
}
public static double max10(双n1、双n2、双n3、双n4、双n5、双n6、双n7、双n8、双n9、双n10){
双a=最大值(最大值(n1,n2),最大值(n3,n4));
双b=最大值(最大值(n5,n6),最大值(n7,n8));
双c=最大值(n9,n10);
返回(a+b+c)-最大值(最大值(a,b),c)-最小值(最小值(a,b),c);
}
公共静态双分钟(双n1,双n2){
return n1解决方案是将10个变量减少为一对最大值。
10个值将得到5对最大值
从5对最大值,我们将其减少到2对最大值+1值
这只给出了3个值-最大值、第二大值和随机值
对于3个值,为了得到第二大值,我们将所有3个值相加,并从中扣除最大值和最小值:
public static double max10(double n1, double n2, double n3, double n4, double n5, double n6, double n7, double n8, double n9, double n10){
double a = max( max(n1, n2), max(n3, n4));
double b = max( max(n5, n6), max(n7, n8));
double c = max(n9, n10);
return (a + b + c) - max(max(a, b), c) - min(min(a, b), c);
}
public static double min (double n1, double n2) {
return n1<n2 ? n1 : n2;
}
public static double max10(双n1、双n2、双n3、双n4、双n5、双n6、双n7、双n8、双n9、双n10){
双a=最大值(最大值(n1,n2),最大值(n3,n4));
双b=最大值(最大值(n5,n6),最大值(n7,n8));
双c=最大值(n9,n10);
返回(a+b+c)-最大值(最大值(a,b),c)-最小值(最小值(a,b),c);
}
公共静态双分钟(双n1,双n2){
return n1这里有一点不同的方法。我不认为它更短,但我更容易说服自己它是正确的
public class SecondMaxFinder {
private double greatest;
private double secondGreatest;
public SecondMaxFinder(double n1, double n2, double n3, double n4,double n5,
double n6, double n7, double n8, double n9, double n10) {
if (n1 > n2) {
greatest = n1;
secondGreatest = n2;
} else {
greatest = n2;
secondGreatest = n1;
}
fitCandidateIn(n3);
fitCandidateIn(n4);
fitCandidateIn(n5);
fitCandidateIn(n6);
fitCandidateIn(n7);
fitCandidateIn(n8);
fitCandidateIn(n9);
fitCandidateIn(n10);
}
private void fitCandidateIn(double n) {
if (n > greatest) {
secondGreatest = greatest;
greatest = n;
} else if (n > secondGreatest) {
secondGreatest = n;
}
}
public double getSecondMax() {
return secondGreatest;
}
}
这样称呼:
double secondMax = new SecondMaxFinder(7.7, 2.1, 3.7, 8.6, 8.6, 9.2, 6.8, 9.6, 8.6, 8.6)
.getSecondMax();
System.out.println(secondMax);
这张打印的是9.2
这里有一点不同的方法。我不认为它更短,但我更容易说服自己它是正确的
public class SecondMaxFinder {
private double greatest;
private double secondGreatest;
public SecondMaxFinder(double n1, double n2, double n3, double n4,double n5,
double n6, double n7, double n8, double n9, double n10) {
if (n1 > n2) {
greatest = n1;
secondGreatest = n2;
} else {
greatest = n2;
secondGreatest = n1;
}
fitCandidateIn(n3);
fitCandidateIn(n4);
fitCandidateIn(n5);
fitCandidateIn(n6);
fitCandidateIn(n7);
fitCandidateIn(n8);
fitCandidateIn(n9);
fitCandidateIn(n10);
}
private void fitCandidateIn(double n) {
if (n > greatest) {
secondGreatest = greatest;
greatest = n;
} else if (n > secondGreatest) {
secondGreatest = n;
}
}
public double getSecondMax() {
return secondGreatest;
}
}
这样称呼:
double secondMax = new SecondMaxFinder(7.7, 2.1, 3.7, 8.6, 8.6, 9.2, 6.8, 9.6, 8.6, 8.6)
.getSecondMax();
System.out.println(secondMax);
这将打印9.2
程序以查找第二个最大值,而不使用数组
import java.util.Scanner;
class p17_second_max {
public static void getSecondLargest(int total) {
int b=0,c=0;
int temp=0;
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= total; i++) {
System.out.print("Enter The "+ i +"value: ");
int a = sc.nextInt();
if (a>b){
temp = a;
a = b;
b= temp;
if(b>c){
temp = b;
b = c;
c = temp;
}
}
}
System.out.print("Second max Value is: "+b);
sc.close();
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter The total No. of input");
int total = sc.nextInt();
getSecondLargest(total);
}
}
不使用数组查找第二个最大值的程序
import java.util.Scanner;
class p17_second_max {
public static void getSecondLargest(int total) {
int b=0,c=0;
int temp=0;
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= total; i++) {
System.out.print("Enter The "+ i +"value: ");
int a = sc.nextInt();
if (a>b){
temp = a;
a = b;
b= temp;
if(b>c){
temp = b;
b = c;
c = temp;
}
}
}
System.out.print("Second max Value is: "+b);
sc.close();
}
public static void main(String args[]) {
Scanner sc = new Scanner(System.in);
System.out.print("Enter The total No. of input");
int total = sc.nextInt();
getSecondLargest(total);
}
}
好奇,但你为什么需要这样的东西?虐待狂面试官?你能使用集合吗?你想不使用数组就找到第二大数字。输入的方式是什么?从文件读取?扫描键盘?是不是给了你10个参数的方法签名?请说清楚..我想有一个最大值和第二个值这里的Max variable应该起作用了?反正OP过去没有接受任何解决方案,所以我会省下2美分。好奇,但为什么你需要这样的东西?虐待狂面试官?你能使用集合吗
?你想找到第二大数字而不使用数组。输入的方法是什么?从文件读取?扫描keyboard?有没有给你10个参数的方法签名?请澄清。我觉得这里有一个max和secondMax变量就可以了?反正OP过去没有接受任何解决方案,所以我会省下2美分。是的,非常优雅solution@dreamcrash谢谢;)如果我使用以下变量尝试您的代码:系统输出println(max10(10,9,8,7,6,5,4,3,2,1)),我知道第二个最大值是6。@Green_Sam,这并不难看出。在您的示例参数中,a
、b
和c
分别变成10、6和2。第二个最大值是6。这反过来意味着答案中的逻辑被破坏。只有当第二个最大值不在t中时,此代码才有效他将“分组”与最大数相同。也就是说,如果max1和max2都在(n1、n2、n3、n4)或(n5、n6、n7、n8)中,那么逻辑将失败,非常优雅solution@dreamcrash谢谢;)如果我使用以下变量尝试您的代码:System.out.println(max10(10,9,8,7,6,5,4,3,2,1)),我知道第二个最大值是6。@Green_Sam,这并不难看出。在您的示例参数中,a
、b
和c
分别变成10、6和2。第二个最大值是6。这反过来意味着答案中的逻辑被破坏。只有当第二个最大值不在t中时,此代码才有效如果max1和max2都在(n1,n2,n3,n4)或(n5,n6,n7,n8)中,那么逻辑就会失败。如果有人想看这个问题,这个问题就解决了:如果有人想看这个问题,这个问题就解决了:我猜最大的=第二大的=n1;以及FitCandidate(n2);而不是前7行应该起作用also@dreamcrash我认为不是。以args 10、9、8、7、6、5、4、3、2、1为例。您可以将secondmaxist
设置为10,而真正的secondmaxist将被忽略。如果您愿意,可以将maxist
和secondmaxist
设置为-Double.MAX\u值,然后fitCandidateIn(n1)
等@dreamcrashYep,但你做的方式更干净。我猜最伟大的=第二伟大的=n1;和fitCandidateIn(n2);而不是前7行应该起作用also@dreamcrash我认为不是。以args 10、9、8、7、6、5、4、3、2、1为例。您可以设置secondgrest