題意:
有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;
}