我應該實作一個函式,從作為輸入的三個數字中找到中間數字。所有輸入都是正整數。我似乎沒有處理導致我的程式未能通過某些測驗的特殊情況,但幅度很小。我的意思是 8 位像素值的 1.46 標準偏差,所以我遺漏的案例應該非常具體,而且介于兩者之間的情況很少。
當我理解這個問題時,這些數字有三種可能性:
- 他們都是平等的,所以要么回傳
- 其中兩個相等,因此回傳較小的(較大的也不起作用)
- 它們都是不同的,因此找到中間值
要么我沒有看到第四個案例,要么我錯過了上述三個案例。我不能使用庫進行排序。
int middle(int a, int b, int c)
{
if (a == b && b == c)
{
return c;
}
if ((a < b && b < c) || (c < b && b < a))
{
return b;
}
if ((b < a && a < c) || (c < a && a < c))
{
return a;
}
if ((a < c && c < b) || (b < c && c < a))
{
return c;
}
if (a == b || b == c || a == c)
{
if (a == b && a < c)
{
return c;
}
else
{
return a;
}
if (b == c && b < a)
{
return a;
}
else
{
return b;
}
if (a == c && a < b)
{
return b;
}
else
{
return c;
}
}
return c; // code sometimes reaches this point; it shouldn't
}
uj5u.com熱心網友回復:
這個案例在這里:
if ((b < a && a < c) || (c < a && a < c))
是不正確的。它應該是:
if ((b < a && a < c) || (c < a && a < b))
此外,在
if (a == b || b == c || a == c)
部分,你有
if (...)
return ...
else
return ...
這將始終回傳,并忽略它后面的 if 陳述句。
也就是說,對 3 個值進行排序然后回傳會容易得多b
if ( b < a ) {
int t = a;
a = b;
b = t;
}
if ( c < b ) {
int t = c;
c = b;
b = t;
}
if ( b < a ) {
int t = a;
a = b;
b = t;
}
return b;
uj5u.com熱心網友回復:
為了在可用時促進簡單性,只需比較三個值,使用單個運算式來確定并回傳中間值是完全合理的。以下使用嵌套的三元運算子來執行此操作。它使用代碼中顯示的輸入進行測驗:
int main(int argc, char *argv[])
{
// int val[] = {7,12,1};
// int val[] = {0,0,1};
int val[] = {-1,-4,-2};
// int val[] = {7,6,2};
// int val[] = {100,99,103};
printf ("middle value is: %d\n", return_middle(val[0], val[1], val[2]));
return 0;
}
int return_middle(int a, int b, int c)
{
return a>b ? ( c>a ? a : (b>c ? b : c)) : (c>b ? b : ( a>c ? a : c));
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/459096.html
