编辑: 有人正在阅读这个奇怪的改变,我想补充最后一件事。 假设问题中的三个值已经在内存中,并且没有改变,我已经计算出不少于14条指令能够实现这个壮举。查找三个值中较大和较小值的最有效算法
我非常喜欢这证实,如果任何人都可以。
[top edit end]
问题很简单。我有三个整数值,我需要找到最大和最小值。按最大我的意思是不是最小或在中间,反之亦然。
由于我无法在网上找到“质量解决方案”,我不得不自己尝试。
if(a > b) {
if(a > c) {
high = a;
if(b > c) {
low = c;
}
else {
low = b;
}
}
else {
if(b > c) {
high = b;
low = c;
}
else {
high = c;
low = b;
}
}
}
else if(a > c) {
if(b > c) {
high = b;
low = c;
}
else {
high = c;
low = b;
}
}
else {
low = a;
if(b > c) {
high = b;
}
else {
high = c;
}
}
假设我没有犯任何错误,这应该使用三个条件来解决问题。
假设它按预期工作,实际上我很满意我的努力,但是我的意图是找到最有效的算法,因此我现在问你是什么。
此致敬礼。
编辑: 我回顾了迄今为止提出的解决方案,他们都很好。
我的最爱迄今。
if(a>b) {
max = a;
min = b;
}
else {
max = b;
min = a;
}
if(c>max)
max = c
else if(c< min)
min = c
2-3个签名和2-3个条件,如果我没有弄错的话。这很让人佩服。
上面的小修改,使用'a'作为'min'的别名。
if(a>b) {
max = a;
a = b;
}
else {
max = b;
}
if(c>max)
max = c
else if(c< a)
a = c
如果只存在于交换变量的简单方法...好吧,我能想到的唯一的事情就是可以消除的需要,“最大”,至少在C和C衍生物,一定止跌除了内存使用方面外,它的效率并不高,我可以花费额外的4个字节。 ;)
“但是我的意图离子是找到最有效的算法“最有效的方面是什么?使用最少的内存?平均执行时间最快?最快的最坏情况执行时间?最少的比较?最少的代码行? –
对于只有两个条件运行的输入? – Deestan
我的错误是,没有只有两个条件的情况。 至于我的意思是最有效......也许我应该用“聪明”这个词代替。我可以从数学的角度来说,涉及最少的步骤或最优雅的解决方案。 – Zacariaz