Re: [問題] 一個分配的問題= =

看板Programming作者 (ha(ruhi|yate)ism)時間18年前 (2007/05/25 13:09), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串2/3 (看更多)
※ 引述《Rokund (....)》之銘言: : 最近遇到一個分配的問題,本來以為很簡單,事實上應該也是很簡單 : 但我想了好久= =,最後是有想出來,覺得很有趣,給大家參考 : 問題: : 假設原本有32個值,分給5個陣列,因為沒辨法整除,因此採取以下做法 : 32/5=6 餘 2 : 所以每個陣列的大小分別給他7, 7, 6, 6, 6 : 也就是說,多出來的平均分配給前面的陣列,所以後面的陣列比較小 : 而且一定要前面的值分給前面的陣列,不是像發牌那種分法 : 那要怎麼把原本32個值對應到每個陣列 : 也就是說 : 原值索引 -> 目的陣列索引 : 0 -> 0 : . : . : 6 -> 0 : 以此類推 : 7 -> 1 : 13 -> 1 : 14 -> 2 : 19 -> 2 : 20 -> 3 : 25 -> 3 : 26 -> 4 : 31 -> 4 : 當我們得到一個「原值索引」也知道6餘2,要怎麼以簡單判斷和計算式, : 也就是不需由0開始算,要怎麼求得「目的陣列索引」? : 上面只是舉例,當然有可能是整除或餘3餘4等等... : 剛因為舉的例子不好,故重貼 我的想法是這樣: 設大陣列全部有n個元素 分到k個陣列 其中n除以k為q餘r (也就是已知的參數是q和r) 因此k個陣列中 前r個有q+1個元素 其餘k-r個有q個元素 因此 大陣列由[0]到[r(q+1)-1]的部份是簡單的每q+1個一組 因此 if(index<r*(q+1)) {arrayNo=index/(q+1); subIndex=index%(q+1);} [r(q+1)]到[n-1]的部份 把它平移r(q+1)個元素 讓[r(q+1)]變成(假設的)新[0] 這個(假設的)新大陣列分組法是簡單的每q個一組 於是分組後 原r號陣列變成新0號陣列 於是就有 else {arrayNo=(index-r*(q+1))/q+r; subIndex=(index-r*(q+1))%q;} ^^^^^^^^^^^^^ ↑↑ 平移成新大陣列索引 ││ 求新陣列號碼│ 反求原陣列號碼 (上面兩個除法都是整數除法 即餘數丟掉) -- 主要思路是把不一樣的切開 因為我們知道全部一樣時要怎麼做 原題切開後兩部份都是已知的做法 套用即可 -- [LPH] Oops, your OOP's a problem? 說: 你現在還是看不到狗? ************* 說: 看得到 只是 他們不會跑 就一直呆呆在那邊 一直在起點 [LPH] Oops, your OOP's a problem? 說: 你要按"ㄅㄧㄤˋ"它們才會跑啊@@" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 192.192.197.117

05/25 23:48, , 1F
沒看清楚,原來不一定是32個
05/25 23:48, 1F
文章代碼(AID): #16Lj_-Ux (Programming)
討論串 (同標題文章)
文章代碼(AID): #16Lj_-Ux (Programming)