[Java]如何可以分辨到兩個相同公倍數的數字的真正倍數?

本帖最後由 3ldk 於 2017-11-15 05:15 編輯

其實我都唔知自己想問乜

用以下例子解釋, 為簡單起見, 暫時唔用0 base, 用住1 base先

Case 1:

有一條4個位的組合 -> a b c c
一直延伸至無限長 -> a b c c a b c c a b c c a b c c a b c c a b c c a b c c a b c c a b c c a b c c a b c c a b c c a b c c


Case 2:

有一條5個位的組合 -> a b c c d
一直延伸至無限長 -> a b c c d a b c c d a b c c d a b c c d a b c c d a b c c d a b c c d a b c c d a b c c d a b c c d a b c c d a b c c d a b c c d



就用Case1黎講
當我假設有一條無限長的組合之後, 隨機抽一個數字, 然後搵返依條組合該位置的字母

例如隨機數係1的話, output就係a
隨機數係2的話, output就係b
隨機數係3的話, output就係c
隨機數係4的話, output就係c

隨機數係6的話, output就係b
隨機數係8的話, output就係c

我最初諗, 如果要搵該隨機數字係組合中的第幾個, 就逐個位mod佢睇下係咪0
但發現其實唔得, 因為會有相同的公倍數

例如:int rand=6
int m=rand % 2
m == 0    <---依個係true, 所以output係b

然後:int rand=8
int m=rand % 2
m == 0    <---依個又係true, 所以output係b, 但正確output應該係8先岩


咁依個問題應該點解決呢? 同埋依個問題有無正式名稱?

本帖最後由 燕飛 於 2017-11-15 12:36 編輯

回復 1 #3ldk

完全錯晒
Int R = Rand % Len of your set(4 in case 1)

LUT
0 a
1 b
2 c
3 c

Result
Rand = 0, R =0, Out = a
Rand = 1, R =1, Out = b
Rand = 2, R =2, Out = c

Rand = 6, R =2, Out = c
Rand = 8, R =0, Out = a



Done



via HKEPC Reader for Android

TOP

直接%4 %5咪得 點解係都要compare with 0

TOP

本帖最後由 梁炳 於 2017-11-15 14:02 編輯

睇唔明你個標題同內容有乜關係...
如果你想知無限sequence既第N位係乜: abccabcc ....

隨機抽個整數, 將佢mod 4, 就可以得到range 0-3既數字
因為你想1 -> "a", 即係offset左1個位,所以要-1

pseudo-code:
char[] sequence = "abcd";
int size = 4;
int randNum = rand();
if(randNum <= 0)
   print "nil"
else
   int pos = (randNum -1) % size;
   else print sequence[pos];

TOP

回覆 1# 3ldk


    其實呢D 條目系唔系 - 電腦奧林匹克競賽 - HKOI 既題目? 

TOP

回覆  3ldk


    其實呢D 條目系唔系 - 電腦奧林匹克競賽 - HKOI 既題目?  ...
bongbong3481 發表於 2017-11-15 19:46


唔係, 依個係我原創, 用黎抽野既algorithm
用返case1做例子
抽到a既機會係4分一
抽到b既機會係4分一
抽到c既機會係2分一

只要砌左第一個組合出黎, 用幾行簡單運算, 就可以你希望既機率抽出一個目標出黎
用左依個algorithm, 就唔洗識好多複雜公式

TOP

回復 6 #3ldk

抽野? 用有Range 既random function 咪得   

via HKEPC Reader for Android

TOP

唔係, 依個係我原創, 用黎抽野既algorithm
用返case1做例子
抽到a既機會係4分一
抽到b既機會係4分一
抽到 ...
3ldk 發表於 2017-11-15 20:04

咁你就咁random number咪得...

TOP

咁你就咁random number咪得...
yjfoeg 發表於 2017-11-15 20:31



其實未完成, 仲有其他條件, 例如抽完無左就永遠無左, 不過其實後續我都未諗好

TOP

其實樓主嘅做法咪限死user只可以用分數,仲要做埋通分母gen條array出黎。
但係其實一有條array就可以抽出黎,唔洗搞餘數。
e.g.
string x="abbcccdddd";
int rand=Random.nextInt(10);
System.print (x.charAt(rand));

TOP