나는 13 개의 카드가 [0-12]로 저장된이 포커 카드 게임을 가지고 있습니다. 13 개의 카드 랭크를 가진 5 개의 카드를 가지고있는 각 핸드.표기 팩터 값을 원래 값으로 다시 곱한 표 팩터
마지막 값은 지수 135 (5의 거듭 제곱)부터 시작하는 식별자입니다.
그것은 어떤 종류의 승리 손을 저장합니다. 나머지 5 개의 13의 힘은 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
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
는 그래서이처럼'(28,561분의 357,451) = 12' '(357,451% 28561)/2197 = 6' '(35만7천4백51퍼센트 2197)/169 = 9' '(357451 % 169)/13 = 1' '(357451 % 13) = 3' if 문없이 첫 번째 값을 어떻게 확인합니까? – SSpoke
그래서 첫 번째 값 0을 얻으려면'357451/371293'을할까요? – SSpoke
숫자의 하이 엔드에 추가 값을 추가한다고 가정하면 순위 [0] = Math를 사용할 수 있습니다.max (0, value-RANKING_FACTORS [0]) –