约瑟夫环乘客问题(非链表解法)

        30个乘客同乘一艘船,因为严重超载,加上风高浪大,危险万分,因此船长告诉乘客,只有将15名乘客投入海中,其他人才能幸免于难。大家决定30个人围成一圈,从第一个人数起,依次报数,数到第九人,遍把他投入海中,然后从他的下一个人数起,数到第九人,再把他投入海中,如此循环进行,直到剩下15个乘客为止。求出哪些是死亡的位置。
#include
int main() {
	const int n = 30;
	int ar[n] = { 0 };
	int i = 0;//下标
	int k = 1;
	int num = 0;//统计人数
	while (num < 15) 
	{
		if (0 == ar[i])
		{
			if (9 == k)
			{
				++num;
				ar[i] = num;
				k = 0;
			}
			++k;
		}
		i = (i + 1)%n;
	}

	printf("下标编号是:\n");
	for (int j = 1; j <= n; ++j)
		printf("%4d", j);
	printf("\n");
	printf("死亡的编号是:\n");
	for(int j = 0; j < n; ++j)
		printf("%4d", ar[j]);
	printf("\n");
}

约瑟夫环乘客问题(非链表解法)_第1张图片

你可能感兴趣的:(约瑟夫环)