约瑟夫环----15美国人15日本经典问题

约瑟夫环

 

 

已知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++; }

    原文作者:约瑟夫环问题
    原文地址: https://blog.csdn.net/gnolhh168/article/details/4730081
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞