题意:
有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\n", i);
system("pause");
return 0;
}
转载于:https://www.cnblogs.com/ssyfj/p/9562286.html