看板 CGI-Game 關於我們 聯絡資訊
想到一個解法 你另外寫一隻程式,function跟原來一樣 只是多一行,在最後一個for加一個 if (answer[0] !=0 && answer[1] !=0 &&...自己填) 這代表這個input有解,就return 1; else return 0; 在主程式裡加一個for int has_answer[6000]; (for int i = 80; i < 6000; i++ ){ has_answer[i] = your_function(i); } (for int i = 80; i < 6000; i++ ){ if (has_answer[i] == 1) cout << i << " has solution\n"; // 或者輸出到一個文字檔 } 接下來是改js 把上述80~6000有解的數字,放入int陣列,例如 int sol[]; sol[0] = 80; sol[1] = 158; sol[2] = 160; ..... 主程式改成 for(int i = 0; i < (sol的最大index); i++) { if ( (input % sol[i]) == 0) //相除餘數為零 your_function(input / sol[i], sol[i]); } 這樣一來,只要算sol[i]的解,結果都乘以input / sol[i] 就不用重複計算已經知道有解的整數倍的結果了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.168.217.123
cowbaying:我寫的不好嗎? 哭哭 07/02 00:37
※ 編輯: youngkai 來自: 218.168.217.123 (07/02 00:39)
shyangs:一樓有發佈源碼嗎= =a 07/02 00:41
neutrino:1. open source的好用 2. 網頁的方便 07/02 00:42
neutrino:我也在想一些修改 改好了在丟上來 07/02 00:42
youngkai:我想到resursive的解法了,大致上原理差不多 07/02 00:43
youngkai:如果80有解,80的倍數必定有解,所以先mod有解的i 07/02 00:44
youngkai:如果是i的倍數,就不用跑那十幾個for-loop了 07/02 00:44
neutrino:不過這本來就是個np-hard問題 不用奢望他能跑太大的input 07/02 00:45
neutrino:怎樣設置一些(給使用者選擇)的限定條件讓他更實用才是重 07/02 00:46
neutrino:點 07/02 00:46
cowbaying:我沒發原碼...我用的只是簡單的迴圈而已 07/02 00:47
cowbaying:等改進後再來發好了 目前在新增功能 07/02 00:48
youngkai:因為是np-hard,所以用空間換時間是最好的解法 07/02 00:53
neutrino:基本上 1082以後所有偶數都有解........這樣幫助有限 07/02 13:01
shyangs:更新,用一些代碼取代最後一個兵種的for-loop計算。 07/02 13:28