题意:
有n个人围成一圈 顺序排号 从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
算法实现:
(二)使用数组实现
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int getLast(int *p, int n)
{
int count = 0,index=0;
int i = 0, k = 0;
while (count<n-1) //一次处理一个步长,只包含if判断,会简单点
{
if (p[i++])
k++;
if (k == 3)
{
p[i - 1] = 0;
count++;
k = 0;
}
if (i == n)
i = 0;
}
for (i = 0; i < n; i++)
if (p[i])
return p[i];
}
int main()
{
int n,i;
int* p;
printf("input number of person:");
scanf("%d", &n);
p = (int*)malloc(n*sizeof(int));
for (i = 0; i < n; i++)
p[i] = i + 1;
i = getLast(p, n);
printf("%d
", i);
system("pause");
return 0;
}