编辑: 关于有人正在阅读这篇文章的奇怪变化,我想补充最后一件事。 假设有问题的三个值已经在内存中并且没有改变,我计算了至少 14 条指令才能实现这一壮举。
如果有人可以的话,我非常喜欢这个确认。
[置顶编辑结束]
问题很简单。我有三个整数值,我需要找到最大和最小的。我所说的最大不是最小,也不是介于两者之间,反之亦然。
由于无法在网上找到“优质解决方案”,我不得不自己尝试。
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
要是有一种简单的方法来交换变量就好了……好吧,我唯一能想到的就是可以消除对“max”的需求,至少在 C 和 C 导数中,肯定不会有效,除了内存使用方面,我可以多花 4 个字节。 ;)
最佳答案
因为你只有 3 个,所以我会使用类似的东西:
Maximum = max(a, max(b,c))
Minimum = min(a, min(b,c))
我不太确定您使用的是哪种语言,但大多数语言都有 max 函数,内置或易于访问。
关于algorithm - 查找三个值中较大和较小值的最有效算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12236863/