輸入:乙個包含n個數的集合a
輸出:集合a的最大值最小值
單一求解最大值與最小值可以通過打擂台的方法來實現,求解最大值或者最小值需要比較n-1次,若同時要求求出最大值與最小值比較的次數為2*n-2次.事實上我們有比這個更快的演算法,比較次數為3n/2.具體做法為:記錄已知的最小值與最大值,對輸入·的元素成對進行處理,首先比較輸入的這對元素,再將小的與當前最小值比較,將大的與當前最大值比較,於是每兩個元素比較3次。
在設定最大值與最小值初始值時候依賴於n是偶數還是奇數,必須保準初始最大最小值後剩下元素有偶數個,這樣才可以成對的比較完。
#includeusing namespace std;
void find_max_and_min(int a, int n, int &min, int &max);
int main();
int min = 0, max = 0;
find_max_and_min(a, 10, min, max);
cout << min << " " << max << endl;
return 0;
}void find_max_and_min(int a, int n, int &min, int &max)
else
i++;
} /*以上初始化min和max的值*/
while (ia[i + 1] ? max : a[i + 1];
} else
i = i + 2;
}}
最大值 最小值
求最大最小的時候有點小技巧,就是我們兩個兩個的比較,把大個跟當前最大比較,小的跟當前最小的比較,這樣就會節約一點比較時間,有原來的2 n到3 n 2。include include 得到最大最小值 int getmaxmin int ndata,int nlen,int pnmax,int pnmi...
最大值最小化(最大值盡量小)
from 給出是個序列,如1 2 3 2 5 4 將其劃分成m個連續的子串行,每個子串行最少有乙個元素,怎樣使每個子串行的和的最大值最小 include include using namespace std define n 10 define inf 1000 int juge int a,in...
int float double 最大值,最小值
中沒有double的最大最小值。如果輸出的比如 100lf輸出2.23432432,沒有達到100位,則最後2後面不一定都是0。原文見view plaincopy to clipboardprint?coder acboy date 2010 3 1 include include using na...