2008年5月22日 星期四

96 試題二

實踐大學高雄校區資管系96學年程式設計比賽試題

題二:亂數產生器


運用電腦進行模擬時經常用到亂數,產生虛擬亂數的方法之一是使用下列的公式
seed(x+1) = [seed(x) + STEP] % MOD

%是計算餘數。
此一公式可以產生0到MOD-1之間的數,這個公式有個問題,就是產生的亂數會週而復始,有相同的序列。減少這種情形必須慎選STEP和MOD兩數,以產生較佳的平均分配亂數,值在0與MOD-1間。

例如,如果STEP=3且MOD=5,這個公式將產生0、3、1、4、2的重複循環,每次循環,所有0到MOD-1之間的數字都會出現。此公式的一個特性是如果每次seed(x)都產生相同seed(x+1),則每次循環都會產生平均分佈的虛擬亂數。

如果STEP=15且MOD=20,這個公式將產生0、15、10、5的重覆序列(如果seed設定不是零,則啟始值不從零開始)。這個STEP和MOD選擇就很糟,因為不是0和MOD-1之間的每個數字都出現。
你的程式就是決定是否選定的STEP和MOD會產生平均分配的虛擬亂數。
輸入值
每一行數入一對整數STEP和MOD,且 1 <= STEP, MOD <= 100,000
輸出值
每一行輸出包含STEP值佔1~10格向右調整,MOD值佔11~20格向右調整,印出Good Choice或Bad Choice從第25格開始,向左調整。當這個亂數產生了MOD個亂數時,包括了0至MOD-1之間的每個數字,則印出Good Choice,否則印出Bad Choice。在每個測試輸出後,你應該再列印一個空行。
範例輸入
3 5
15 20
63923 99999

範例輸出
         3         5     Good Choice
15 20 Bad Choice
63923 99999 Good Choice



試題二解答(即ACM problem 408解答)
試題目錄
回到首頁

沒有留言: