// 报数
#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;
}
8-4 报数
最新推荐文章于 2021-05-21 18:15:21 发布