1248 - C语言10.18
时间限制 : 1 秒
内存限制 : 32 MB
有n个人围成一圈,顺序从1开始排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
题目输入
只有一个正整数n,保证n不超过1000。
题目输出
输出最后留下的人的原始编号。
请注意行尾输出换行。
输入/输出样例
输入格式
10
输出格式
4
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; }
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; }