Re: [問題] 資料串取代問題

看板C_and_CPP (C/C++)作者 (software everywhere)時間15年前 (2009/02/20 23:19), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串4/4 (看更多)
43 突然夢中有夢到 如果有幫到你 都是周公的功勞... 這題如果可以把 {#1,#2,#3,#4,#5} 的關係 對應成一維的 array 或許 可以比較快 但是 這是 5個獨立的 數值 沒有辦法用 直接產生 唯一的uniq code/ID 可以代表大小 ex: 如果 你確定 第一位數字最大只到 M 那麼 #1*M+... 就可以得到一個 可以代表 絕對大小的code/ID but 這邊不能這樣做 因為 還不知道 某一個位置的數值最大是多少 so 依據你的敘述 改使用下面這種關係 對應成一維的array 對於 struct {#1,#2,#3,#4} A,B 如果 A<B <=> 1. A.#1 < B.#1 or then 2. A.#2 < B.#2 or then 3. A.#3 < B.#3 or then 4. A.#4 < B.#4 如此 就可以將 {#1,#2,#3,#4} 的大小關係 對應到一個 array上面 then 對於一個 新進的 資料 用linear search 的方式找出 原先array中 小於他的 {##} 砍掉 but 如果該筆新data 沒有辦法壓過任何一筆 原先就有的資料 那 就是他被砍掉 如果你覺得原理很難懂的話 簡而言之就是: "裁很大 裁很兇 裁了還不想給錢 裁Online 暗!" 而且做夢還會夢到 code呢 typedef struct{ unsigned int elem[5]; }Data5; Data5* ar_p_data5[100]; //上限自己調 int cmp_data5( const void* L, const void* R){ int n=0; const unsigned int* pl= (*(Data5**)L)->elem; const unsigned int* pr= (*(Data5**)R)->elem; return ( (n=*pl++ - *pr++)!=0)?n: ( (n=*pl++ - *pr++)!=0)?n: ( (n=*pl++ - *pr++)!=0)?n: ( *pl-*pr); }; //......................... Data5 *p_data5= (Data5*) malloc( sizeof(Data5) ); unsigned int* pu = p_data5->elem; scanf("%d %d %d %d",pu,pu+1,pu+2,pu+3); //......................... 那個 linear search 我就沒夢到了 還有 ar_p_data5 當作 stack 移動的寫法 也是 不知道有沒有幫到原po的忙 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.166.122.237
文章代碼(AID): #19didogC (C_and_CPP)
文章代碼(AID): #19didogC (C_and_CPP)