1248 - C语言10.18

通过次数

0

提交次数

0

时间限制 : 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;
}