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