杭电-2516-取石子游戏
取石子游戏 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 3871 Accepted Submission(s): 2315 Problem Description 1堆石子有n个,两人轮流取.先取者第1次可以取任意多个,但不能全部取完.以后每次取的石子数不能超过上次取子数的2倍。取完者胜.先取者负输出"Second win".先取者胜输出"First win". Input 输入有多组.每组第1行是2<=n<2^31. n=0退出. Output 先取者负输出"Second win". 先取者胜输出"First win". 参看Sample Output. Sample Input 2 13 10000 0 Sample Output Second win Second win First win
ps:这道题很水的,找出1,2,3,5,8,13,21........是第二个赢,按照这个规律做,先打表
代码:
1 #include<stdio.h> 2 3 int num[500] = { 0 }; 4 5 int main() 6 { 7 num[1] = 1; 8 num[2] = 2; 9 int sum = num[1] + num[2]; 10 int i; 11 for (i = 3; sum <= 2147483648; ++i) 12 { 13 num[i] = num[i - 1] + num[i - 2]; 14 sum = num[i] + num[i - 1]; 15 } 16 int n; 17 while (scanf_s("%d", &n) && n) 18 { 19 bool is = true; 20 for (int j = 1; j < i; ++j) 21 { 22 if (num[j] == n) 23 { 24 is = false; 25 printf_s("Second win\n"); 26 break; 27 } 28 } 29 if (is) 30 { 31 printf_s("First win\n"); 32 } 33 } 34 35 return 0; 36 }
浙公网安备 33010602011771号