约瑟夫环
已知n个人(以编号1、2、3~~n分别表示)围坐在一张圆桌周围,从编号为k的人开始报数,数到m的那个人出列,他的下一个人又从1开始报数,数到m的那个人出列,依次规律重复下去,直到圆桌周围的人全部出列。
例如:n = 9, k = 1, m = 5
【解答】
出局人的顺序为5, 1, 7, 4, 3, 6, 9, 2, 8。
经典问题:
15个美国人和15个日本人围坐一圈,从其中一人开始数数,从1数到9,数到9的人踢出去,设计代码使被踢出的人都是日本人,输出日本人坐的位置:
下面是C#代码:
string Res = “”; int[] a=new int[30]; for (int i = 0; i < 30; i++) a[i] = i + 1; int jap = 0; //踢出的总个数 int k=1; //循环的人数 for (int j = 0; jap < 15; j++) { if (a[j % 30] == -1) continue; //-1表示该位置的人已经被踢了出去 k = k % 9; if (k == 0) { Res += a[j % 30] + ” “; a[j % 30] = -1; jap++; } k++; }