我有這個撲克紙牌遊戲,其中可能的13張牌等級存儲爲[0至12]。每支持有5張有13張可能卡牌的卡牌。開箱指數因子表乘以打包值返回原始值
最終值是從指數13 5開始(到5的冪)的標識符。
哪些存儲什麼樣的贏手。 然後13個剩餘的5個冪用於存儲5張卡片中的每張卡片。
此外更不用說,並非所有5張牌都是在任何時間存儲的,這只是爲了高牌贏,這需要4個踢球手。
我的問題是隻使用最終的價值,我將如何能夠解開每張卡片和它是什麼樣的獲獎手。
/** The ranking factors (powers of 13, the number of ranks). */
private static final int[] RANKING_FACTORS = {371293, 28561, 2197, 169, 13, 1};
rankings[0] = HIGHCARD WIN [0]
rankings[1] = 12; //Ace
rankings[2] = 6; //Eight
rankings[3] = 9; //Jack
rankings[4] = 1; //Three
rankings[5] = 3; //Five
// Calculate value.
for (int i = 0; i < NO_OF_RANKINGS; i++) {
value += rankings[i] * RANKING_FACTORS[i];
}
(0*371293) + (12*28561) + (6*2197) + (9*169) + (1*13) + (3*1) = 357451
試圖從該值中解壓值。 開始試圖找出這裏的數學。
if 357451 < 371293 rankings[0] = 0
(357451/28561) = 12 rankings[1] = 12
(357451/2197)/((13*2)+1) = 6 rankings[2] = 6
(357451/169)/((13*18)+1) = 9 rankings[3] = 9
//Alright it seems that 18 is from answers (12+6) probably because I haven't subtracted them or something.
//So next one should be (12+6+9)= 27, but it's 2115
(357451/13)/((13*2115)+1) = 1 rankings[4] = 1
(357451/1)/((13*9165)+1) = 3 rankings[5] = 3
我想我想通了,但我不明白的價值可能也只適用於這種情況下將打破任何其他情況。
不知道值2, 18, 2115, 9165
得到的值可能是我編造的一些廢話。
我該如何做到這一點?我不認爲我可以使用移位,因爲這不是按位。
那麼它是這樣完成的呢?
(357451/371293) = 0
(357451/28561) = 12
(357451 % 28561)/2197 = 6
(357451 % 2197)/169 = 9
(357451 % 169)/13 = 1
(357451 % 13) = 3
所以是這樣的'(28561分之357451)= 12' '(357451%28561)/ 2197 = 6' '(357451%2197)/169 = 9' '(357451%169)/ 13 = 1' '(357451%13)= 3'如何在沒有if語句的情況下檢查第一個值? – SSpoke
所以你也做'357451/371293'來獲得第一個值0? – SSpoke
假設你只是在數字的高端添加額外的值,你可以使用排名[0] =數學。max(0,value-RANKING_FACTORS [0]) –