QuizWit

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ QuizWit ] in KIDS
글 쓴 이(By): earny (O___L_)
날 짜 (Date): 2003년 12월 10일 수요일 오후 10시 47분 03초
제 목(Title): Re: [문제] 1,7,13 개씩


일단 개수가 1개일때부터 차근차근 구해나가면 구하는 알고리즘은 
존재하겠네요.

대충 C로 짜서 돌리면 결과는 아래와 같습니다.
근데, 대충 머리로 생각해봐도 pattern은 알수 있을거 같네요.
중간 중간에 A만 연속으로 나타나는 block이 주기적으로 나타나겠네요.

1: A win
2: B win
3: A win
4: B win
5: A win
6: B win
7: A win
8: B win
9: A win
10: B win
11: A win
12: A win
13: A win
14: A win
15: A win
16: A win
17: A win
18: A win
19: B win
20: A win
21: B win
22: A win
23: B win
24: A win
25: B win
26: A win
27: B win
28: A win
29: B win
30: A win
31: A win
32: A win
33: A win
34: A win
35: A win
36: A win
37: A win
38: B win
39: A win
40: B win
41: A win
42: B win
43: A win
44: B win
45: A win
46: B win
47: A win
48: B win
49: A win
50: A win

=========== Source Code ============

#define MAX_IDX 50
#define A_WIN   0
#define B_WIN   1
#define ELEMENTS(x) (sizeof(x)/sizeof(x[0]))

int main()
{
    char state[MAX_IDX+1];
    int unit_list[] = {1, 7, 12};

    int i, j;

    state[0] = B_WIN;
    for (i=1; i <= MAX_IDX; i++) {
        for (j=0; j < ELEMENTS(unit_list); j++) {
            if (i >= unit_list[j]) {
                if (state[i-unit_list[j]] == B_WIN) {
                    state[i] = A_WIN;
                    break;
                }
            }
        }

        if (j == ELEMENTS(unit_list)) {
            state[i] = B_WIN;
        }

        if (state[i] == A_WIN) {
            printf("%d: A win\n", i);
        } else {
            printf("%d: B win\n", i);
        }
    }
}

[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.