游客 Signup | Login
中文 | En

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;
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题