Re: [問題] 資料串取代問題
看板C_and_CPP (C/C++)作者softwind (software everywhere)時間15年前 (2009/02/20 23:19)推噓0(0推 0噓 0→)留言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
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章