我正在考虑一种逻辑,即在不使用数组或循环的情况下找到五个给定数字的第三大数,但可以使用条件。
Here是斯蒂芬c找到三重中间值的最快方法。我想创建一个逻辑 5个数字找到第三大。
我希望尽可能减少比较,以找到最佳解决方案。
答案 0 :(得分:1)
不是最有效的,但至少它是可读的。
int median(int a, int b, int c, int d, int e)
{
if (a > b) swap(a, b);
if (a > c) swap(a, c);
if (a > d) swap(a, d);
if (a > e) swap(a, e);
if (b > c) swap(b, c);
if (b > d) swap(b, d);
if (b > e) swap(b, e);
if (c > d) swap(c, d);
if (c > e) swap(c, e);
return c;
}
答案 1 :(得分:1)
这个怎么样?
public static int getMiddle(int a, int b, int c, int d, int e){
int temp;
if(a>b){
temp=b; b=a; a=temp;
}
if(b>c){
temp=c; c=b; b=temp;
}
if(c>d){
temp=d; d=c; c=temp;
}
if(d>e){
temp=e; e=d; d=temp;
}
if( e>d && d>c && c>b && b>a )
return c;
else
return getMiddle(a, b, c, d, e);
}
注意:根据5个数字的值,我强烈认为您无法减少必须进行的总比较,但您只能简化或优化比较方式。