C语言复习---找出报数最后一人
题意:
有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; }