2287 - D 、Q数球

D和小Q是很好的兄弟,整天都是呆在一起;近日,他们闲着无事,玩一种游戏打发时间,他们把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++;
			}
		}
	}
}
时间限制 2 秒
内存限制 128 MB
讨论 统计
上一题 下一题