使用数组解决约瑟夫问题
问题:
有n个人围成一圈,顺序排号,从第1个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
#include<stdio.h>
#define N 5
int sort_arr(int *p, int length)
{
int i, j, count = 0, count1 = 0;
for(i = 0; i < N; i++)
{
if(p[i] == 0)
{
//如果数组的最后一个元素变为0的话,这里可以矫正i的变化
if(i == N-1)
{
i = -1;
}
continue;
}
else
{
if(count1 == N-1)
{
return i;
break;
}
//这里记录次数数到3
count++;
if(count == 3)
{
count = 0;
p[i] = 0;
//这里记录变为0的个数
count1++;
}
}
if(i == N-1)
{
i = -1;
}
}
return 0;
}
int main()
{
int arr[N] = {1, 2, 3, 4, 5}, num;
num = sort_arr(arr, N);
printf("%d", num+1);
return 0;
}