取亂數的問題 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
小蚊子
中階會員 發表:55 回覆:267 積分:94 註冊:2002-06-08 發送簡訊給我 |
|
Coffee
版主 發表:31 回覆:878 積分:561 註冊:2006-11-15 發送簡訊給我 |
hagar大想要的是像這樣嗎?
假設以4個數字來說,每一組解有四個數列並組成一個方陣 1234 4123 3412 2341 1243 3124 4312 2431 1342 2134 4213 3421 1324 4132 2413 3241 1423 3142 2314 4231 1432 2143 3214 4321 這樣的話,以N個數字來說就會有(N-1)! = (4-1)! = 3 * 2=6個組合 hagar大可以先寫個程式窮舉所有組合之後轉成靜態陣列,然後每次就從這6個組合裡面任取一組出來之後對數列的順序作random 如果是1到6的數字,一共會有5*4*3*2個組合,那在產生時只要取random(120)之後,再對該方陣中的六個數列的順序作一次random擺放即可
------
不論是否我發的文,在能力範圍皆很樂意為大家回答問題。 為了補我的能力不足之處,以及讓答案可以被重複的使用,希望大家能儘量以公開的方式問問題。 在引述到我的文時自然會儘量替各位想辦法,謝謝大家! |
Fishman
尊榮會員 發表:120 回覆:1949 積分:2163 註冊:2006-10-28 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
syntax
尊榮會員 發表:26 回覆:1139 積分:1258 註冊:2002-04-23 發送簡訊給我 |
一個非常快又簡單的方法
將你所取的東西改成字串 以 24 為例 字串格式為 AxBxCxDx .....Xx 大寫字母為為標定欄位用,小寫 x 是你的數字,這樣為一組 如 6 7 10 13 21 ..... 變成 A6B7C10D13 然後每一組附加在前一組後方並加上分隔字元,我喜歡用 #10#13 變成 A9B5C11D3...#10#13A6B7C10 這樣用 pos 函式馬上可以比出是否有重複 如果你要取出一位後就比一次,那這樣會很快,因為 system 的 寫得很好,速度 pos 很快 如果你要取出 24 位後才判斷一次,那標定欄位用的那些大寫字母,就可以省了 更是於如果你取出 24 位後才判斷一次,可以直接將之轉成數字,相減不為 0 就是不相同 不過 24 位數,需要10^39 來運算,所以必需拆成兩組 因為 Int64 也只也 10^19 這也好,第一組不相同,第二組也就不用比了 所以將取得的數字,依其位數,到某一位化第一數字,之後為第二數字,只有相減為零,才是一樣,不然絕對數字不同,排列也不同 不過還是要用會圈一一與先前的數字去相減 所以我想還是字串比對會快一點,畢竟只要比一次,且字串可以 2GB 表示 2GB / 39 byte 這麼多組 這樣,不需窮舉,也不需先建表格 沒有取出組數的限制,也沒有數字上的限制,想要用 99 位數,也可以 可想 9999 位數,只有取 10 次 需要為了那 10 次去建立 N 種的表格嗎?我想,就省了吧 不過這只是其中一種解法,還有其他方法,留給大家去想 |
jasbeing
一般會員 發表:6 回覆:19 積分:5 註冊:2002-08-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |