【c语言】13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。用链表处理

#include <stdio.h>
#define N 13
struct person
{
	int number;
	int nextp;
}link[N+1];

int main()
{
	int i,count,h;
	for(i=1;i<=N;i++)
	{
		if(i==N)
			link[i].nextp=1;
		else
			link[i].nextp=i+1;
			link[i].number=i;
	}
	printf("\n");
	count=0;
	h=N;
	printf("sequence that persons leave the circle:\n");
	while(count<N-1)
	{
		i=0;
		while(i!=3)
		{
			h=link[h].nextp;
			if(link[h].number)
				i++;
		}
		printf("%4d",link[h].number);
		link[h].number=0;
		count++;
	}
	printf("\nThe last one is");
	for(i=1;i<=N;i++)
		if(link[i].number)
			printf("%3d",link[i].number);
		printf("\n");
		return 0;
}

你可能感兴趣的:(【c语言】13个人围成一圈,从第1个人开始顺序报号1,2,3.凡报到3者退出圈子。找出最后留在圈子中的人原来的序号。用链表处理)