Re: [問題] 請問初學C語言推薦書(文長

看板C_and_CPP (C/C++)作者 (Neisseria)時間7年前 (2018/05/10 23:25), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/7 (看更多)
不預先將陣列排序的話,大概就是 O(n) 以下提供一個 C 的版本: #include <assert.h> #include <stddef.h> // Yet another linear search. #define max(sz, arr, out) do { \ if (sz <= 1) { \ out = arr[0]; \ break; \ } \ out = arr[0]; \ size_t i; \ for (i = 1; i < sz; i++) { \ out = arr[i] > out ? arr[i] : out; \ } \ } while (0); int main(void) { int arr_i[] = {4, 2, 5, 1, 3}; int max_i; max(5, arr_i, max_i); assert(max_i == 5); float arr_f[] = {2.2, 3.3, 1.1, 5.5, 4.4}; float max_f; max(5, arr_f, max_f); assert(max_f == 5.5); return 0; } 這是寫好玩的,考試不要這樣寫,這樣只是在搞自己 有寫過一些 C 的就知道原因 ※ 引述《freexq (快樂蕃茄)》之銘言: : 題目:5個數字取最大值 : 貢獻三種寫法,希望有人能貢獻更多寫法 : 根據以往寫程式的經驗,一個題目不會只有一種解法 : 資料結構也許不同以外,程式流程(演算法)也不同 : 以下我的 : 第一種解法是手刻 : 第二種解法是利用sort()函式排列由小至大,然後取最大數 : 第三種解法是偷吃步,直接呼叫max_element()函式 : 基本上作業或考試應該用第一種手刻 : 而第二、三種寫法應該是自己開發程式情況下,直接取適合函式出來用 : 優點是比較不容易出錯,而且更節省時間 : 自己手刻則不一定一次到位,可能要test或debug。 : 以下是程式碼 : (一) : #include <iostream> : using namespace std; : int main() : { : int num[5],max; : //輸入五個整數至陣列num[] : cout<<"請輸入5個數字"<<endl; : for(int i=0;i<5;i++) : cin>>num[i]; : //逐一和整個陣列比較,取最大 : max=num[0]; : for(int i=1;i<5;i++) : { : if(num[i]>max) : max=num[i]; : } : //輸出最大數 : cout<<"\n最大數為 "<<max<<endl; : return 0; : } : (二) : #include <iostream> : #include <algorithm> : using namespace std; : int main () : { : int num[5]; : //輸入5個int數字至num[] : cout<<"請輸入5個數字"<<endl; : for(int i=0;i<5;i++) : cin>>num[i]; : //開始排序,由小到大 : sort(num,num+5); : //輸出最大數 : cout<<"\n最大數為 "<<num[4]<<endl; : return 0; : } : (三) : #include <iostream> : #include <algorithm> //使用max_element()函數 : using namespace std; : int main() : { : int num[5]; : //輸入5個int數字至num[] : cout<<"請輸入5個數字"<<endl; : for(int i=0;i<5;i++) : cin>>num[i]; : //輸出最大數 : //注意max_element()函數傳回 指標 : cout<<"\n最大數為 "<<*max_element(num,num+5)<<endl; : return 0; : } -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 112.105.249.161 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1525965934.A.BB5.html
文章代碼(AID): #1Qz6Hkkr (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1Qz6Hkkr (C_and_CPP)