引用:http://www.cppblog.com/guyuecanhui/articles/76443.html
问题描述:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列,求最后一个出列人的编号。
代码:
#include <stdio.h> int josephus(int n, int m, int start) { int k = 1; for(int i=2; i<=n; i++) k = (k+m-1)%i + 1; return (k+start-1) % n; } int main(void) { printf("%d\n", josephus(6, 3, 1)); return 0; }