1248 - C语言10.18
有n个人围成一圈,顺序从1开始排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
Input
只有一个正整数n,保证n不超过1000。
Output
输出最后留下的人的原始编号。
请注意行尾输出换行。
Examples
Input
10
Output
4
Solution C
#include <stdio.h> #include <stdlib.h> int main() { int n; scanf("%d", &n); int a[1000] = {0}; int i=0, j=0, m; for (i=0; i<n; i++) a[i] = i+1; i=0; for (m=0; m<n; m++) { j=0; while (j<3) { while (a[i] == 0) i = (i+1) % n; if (j==2&&m!=n-1) { a[i]=0; } i = ((i+1) % n); j++; } } i = i-1; if (i<0) i=n-1; printf("%d\n", a[i]); return 0; }
Solution C++
#include <stdio.h> int main() { int n, i, cur; int next[1000]; scanf("%d", &n); for (i = 0;i < n;i++) next[i] = (i + 1) % n; cur = 0; for (i = 0;i < n - 1;i++) { cur = next[cur]; next[cur] = next[next[cur]]; cur = next[cur]; } printf("%d\n", cur + 1); return 0; }