8-4 报数

// 报数
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
	int n;				// n个人 
	int m;				// 报到 m就退出
	int i; 
	int num = 0;		// 报数 
	int count = 0;		// 记录退出的人数 
	int *flag;
	
	printf("请输入人数:");
	scanf("%d", &n);
	while(n<=1)
	{
		printf("请重新输入人数 (n>1):");
		scanf("%d", &n);
	}
	printf("请输入报到几就退出:");
	scanf("%d", &m);
	while(m>=n)
	{
		printf("请重新输入报到几就退出 (m<n):");
		scanf("%d", &m);
	}
	if((flag = (int *)calloc(n, sizeof(int))) == NULL)
	{
		printf("Not able to allocate memory. \n");
		exit(1);
	}
	for(i=0; i<n; i++)
	{
		flag[i] = 1;			// 初始状态 
	}
	
	printf("退出圈子的人的编号按顺序排列是: "); 
	for(i=0; ; i++)
	{
		if(i == n)
			i = 0;
		if(count == n-1)		// 判断游戏是否结束 
			break;
		if(flag[i] == 1)		// 判断当前人是否还存活 
		{
			num = num + 1;
			if(num%m == 0)
			{
				printf("%d ", i+1);
				flag[i] = 0;
				count = count + 1;
			}
		}
	}
	printf("\n");
	for(i=0; i<n; i++)
	{
		if(flag[i] == 1)
		{
			printf("胜利者的编号是: %d\n", i+1);
			break;
		}
	}
	
	free(flag);
	return 0;
} 

猜你喜欢

转载自blog.csdn.net/kirisame9/article/details/79860084