| [ 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); } } } |