2287 - D 、Q数球
小D和小Q是很好的兄弟,整天都是呆在一起;近日,他们闲着无事,玩一种游戏打发时间,他们把n个球按顺序编号,排成一个圆,从第一个球开始数,每数到第三个球,就把那个球拿出去,他们想看看最后剩下的球的编号是多少?
题目输入
输入有多组数据,每组数据输入n (n <= 10000);代表多少个球
题目输出
输出最后剩下的球的编号
输入/输出样例
题目输入
3
题目输出
2
C语言解答
#include <stdio.h> int main() { int n,i,s=0; while(scanf("%d",&n) !=EOF) { s=0; for (i=2;i<=n;i++) s=(s+3)%i; printf("%d\n",s+1); } }
C++解答
#include<iostream> #include<algorithm> using namespace std; struct a{ int n; int f; }; a text[100001]; int main(){ int n; //freopen("1cin.in", "r", stdin); //freopen("1cin.out", "w", stdout); while(scanf("%d",&n) != EOF){ for(int i = 1;i <= n;i++){ text[i].n = i; text[i].f = 1; } int count = 1; while(1){ int t = 0; for(int i = 1;i <= n;i++){ if(text[i].f == 1){ t++; } } if(t == 1){ for(int i = 1;i <= n;i++){ if(text[i].f == 1){ cout<<text[i].n<<endl; } } break; } int f = 3; while(1){ if(text[count].f == 1){ f--; } if(f == 0){ text[count].f = 0; break; } if(count == n){ count = 0; } count++; } } } }