編集: 誰かがこれを読んでいるという奇妙な変更について、最後に 1 つ追加したいと思います。問題の 3 つの値が既にメモリ内にあり、それらが変更されていないと仮定すると、この偉業を達成するために少なくとも 14 の命令を数えることになります。
誰かができるなら、私はこれが非常に好きです。
【トップ編集終了】
問題は簡単です。3 つの整数値があり、最大値と最小値を見つける必要があります。最大とは、最小または中間ではないことを意味し、その逆も同様です。
オンラインで「質の高い解決策」を見つけることができなかったので、自分で試してみる必要がありました。
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;
}
}
私が間違いを犯していないと仮定すると、これは 3 つの条件を使用して問題を解決するはずです。
意図したとおりに機能すると仮定すると、実際には私の努力に満足していますが、私の意図は最も効率的なアルゴリズムを見つけることでした.
よろしくお願いします。
編集:これまでに提案されたソリューションを確認しましたが、どれも素晴らしいものです。
これまでのところ私のお気に入り。
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個の条件文。それが印象的です。
'min' のエイリアスとして 'a' を使用して、上記の小さな改訂。
if(a>b) {
max = a;
a = b;
}
else {
max = b;
}
if(c>max)
max = c
else if(c< a)
a = c
変数を交換する簡単な方法があれば... まあ、私が考えることができる唯一のことは、少なくとも C および C 派生物では、'max' の必要性を排除できるということです。メモリ使用量に関しては、余分な 4 バイトを費やす余裕があります。;)