C_Sharp 板


LINE

目前因為程式上需求 需要寫一個能夠找出一陣列內所有相加後可能的值 例如:一陣列內容有1 2 3 4 5 那可能會產生的值就會有 1 2 3 4 5 1+2 1+3 1+4 1+5 2+3 2+4 2+5 3+4 3+5 4+5 1+2+3 1+2+4 1+2+5 1+3+4 1+3+5 1+4+5 2+3+4 2+3+5 3+4+5 1+2+3+4 1+2+3+5 2+3+4+5 1+2+3+4+5 不知道大家有沒有碰過相關的問題 不知道統計或是數學上有沒有這種的公式可以使用的 還在努力想有什麼相關聯>"< --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.38.122.183
1F:→ ghostx2:可參考這篇文章 http://ppt.cc/eeai 07/16 23:54
2F:推 qwer820404:你這樣列出來之後 你可以去觀察一下 其實有個特性在 07/17 01:32
3F:推 qwer820404:我會先對陣列做排序,排完後會有個特性 每個組合的後數 07/17 07:56
4F:→ qwer820404:一定大於他前數 (在於陣列值不會有重複出現的情況下) 07/17 07:57
5F:→ qwer820404:那如果說 值有可能重覆 那要的組合方式有二種情況 07/17 07:58
6F:→ qwer820404:重覆的值 在一個組合裡只會出現一次 也就是說 出現一個 07/17 07:59
7F:→ qwer820404:跟出現100個同樣的值 還是等同於出現一次 就可以先用 07/17 07:59
8F:→ qwer820404:就可以先 消除掉不必要的 只留下最後確定有用的再處理 07/17 08:00
9F:→ qwer820404:那如果重覆的值 可以出現多次 就代表說 可以用個技巧 07/17 08:01
10F:→ qwer820404:讓程式 會把一樣的值 當作都是不一樣的東西 07/17 08:01
11F:→ qwer820404:那如果這種要用遞迴做 後數會是大於等於他前數 07/17 08:02
12F:→ qwer820404:如果小弟的做法有什麼可改或思考有不對的 歡迎指教 07/17 08:03
可能一開始規則沒訂好 假設我的矩陣目前有15個值 1 2 3 3 4 4 5 6 7 7 8 9 10 11 12 然後要根據這十五個值排出其相加所有能夠產生的值 例如1+2 +3+3+4=13 所以一樓的那個做法可能就沒辦法了QQ 目前用比較笨的方法 假設我的陣列B1=[1 2 2 3 4] 5個值我就設五層的FOR迴圈 然後用一個ArrayList用放所以可能產生的值 for i=0;i<5i++ { A1.Add(B1[i]); for j=2:5 (簡寫) if (j>i) { A1.Add(B1[i]+B1[j]); for k=3:5 { if (k>j) { A1.Add(B1[i}+B1[j]+B1[k]); for L=4:5 { if(L>k) { A1.Add(B1[i]+B1[j]+B1[k]+B1[L]); for (M=5;M<=5;M++) { if(K>M) { A1.Add(B1[i]+B1[j]+B1[k]+B1[L]+B1[M]); }}}}}}}} 這樣的做法就能夠把所有可能產生的值列出來 1 1+2 1+2+3 1+2+3+4 1+2+3+4+5 1+2+3+5 1+2+4 1+2+4+5 1+2+5 1+3 . . . 這樣的做法成找出所以相加的可能性 之後再將A1用兩個迴圈去判定有沒有重覆的 重複的就移除囉!! 不過除了這樣的方法有沒有什麼更好的方法 不知道2樓的大大是不是跟我一樣的意思 因為這個方法還滿耗時間的 而且算是暴力破解法吧(汗) 希望大家一起討論看看囉!! ※ 編輯: chris70211 來自: 114.38.119.227 (07/17 22:23)
13F:推 qwer820404:我得比較不同耶 我是在做組合前就先考量重覆性定義 07/17 23:50
14F:→ qwer820404:你是在組合後 才去做 所以 你的COST會比較高吧 07/17 23:50
15F:→ StupidGaGa:這問題像學校出的,考基礎邏輯概念 07/18 10:24
16F:→ StupidGaGa:如果要考慮到程式的彈性 建議這問題切割成許多function 07/18 10:26
17F:→ StupidGaGa:1.先做n相異物不重複取出m組合,先簡稱Cnm 07/18 10:29
18F:→ StupidGaGa:2. 把n跟m變化 07/18 10:30
19F:→ StupidGaGa:兩個大Function概念是這樣 07/18 10:31
因為重點在於矩陣數值的相加的值 所以如果在相加之前就考慮重覆性會把相加的可能性降低 例如 1 2 2 相加的值就會有1 2 2 3 3 4 5 可是如果一開始就考慮重覆性的問題 相加的值就只會有 1 2 3不知道有沒有誤解你們的意思 ※ 編輯: chris70211 來自: 114.38.122.29 (07/18 21:03)
20F:→ qwer820404:有…你還是在以結果面來看 結果都是一樣的 07/19 00:09
21F:→ qwer820404:是做法上跟順序不同 同樣的結果 不一樣的過程 07/19 00:10
22F:→ qwer820404:重覆不重覆是你的情境下設定的條件啊 07/19 00:10
23F:→ StupidGaGa:數值重複這本來就要等到全部做完才知道 07/19 02:10
24F:→ StupidGaGa:你先考慮數值重複在思考排列是本末倒置的做法 07/19 02:10
25F:→ StupidGaGa:有時候問題不只一種解法,要找適合你自己的解法 07/19 02:11
26F:→ StupidGaGa:不過可以確定的是,你那寫法不太優.... 07/19 02:19
27F:→ StupidGaGa:如果你是學生,我認為你就照你的想法寫沒差 07/19 02:20
28F:→ StupidGaGa:如果在工作,你那樣寫法程式彈性不夠,後人維護困難 07/19 02:21
29F:推 hangchu:這叫幕集合(power set),我在 Programming 版有發問過 07/20 03:03
30F:→ hangchu:答案是 http://goo.gl/FHYf6 07/20 03:03







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Boy-Girl站內搜尋

TOP