题目描述:n个人围成一圈,顺序排号。从第一个人开始报数(从1~3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位?
代码如下:
#include<stdio.h>
#include<stdlib.h>
//报数函数
void count(int n)
{
int i, k, m;
int *num;
num = (int*)malloc(sizeof(int)*n);//为数组num分配内存
for(i=0; i<n; i++)
{
num[i] = i + 1;//为每人编号1 ~ n
}
i = 0;//循环计数变量
k = 0;//1,2,3计数变量
m = 0;//m为退出人数
while(m < n - 1)//当剩下一人时退出循环
{
if(num[i] != 0)
{
k++;
}
if(k == 3)
{
k = 0;
m++;
num[i] = 0;//当报到3时,将该人编号置为0,表示退出圈子
}
i++;
if(i == n)//报数到结尾i恢复0
{
i = 0;
}
}
while(*num == 0)//寻找最后剩下的人
{
num++;
}
printf("%d", *num);
}
int main()
{
int n;
scanf("%d", &n);
count(n);
return 0;
}
示例