有n人围成一圈,顺序排号。从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来的第几号的那位。
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n, array[500];
//输入总人数
scanf_s("%d", &n);
//编号
for (int i = 0; i < n; i++) {
array[i] = i + 1;
}
int k = 0;//报数
int m = 0;//退出人数
int* array_end, * p;
array_end = array + n;//数组最后一个元素的位置
p = array;
while (m < n - 1) //当退出的人数不大于总人数时,即留下的人数至少是一个人
{
//当前指针未到array_end的位置且其指向的元素不为0
if ((p != array_end) && (*p != 0))
{
k++;
}
if (k == 3)
{
k = 0;//数到3重新数
*p = 0;//将当前指针指向的元素赋值为0
m++;
}
p++;
if (p == array_end)
{
p = array;
}
}
for (int b = 0; b < n; b++)
{
if (array[b] != 0)
{
printf("%d", array[b]);
}
}
return 0;
}