约瑟夫环问题

来源:互联网 发布:matlab2014b for mac 编辑:程序博客网 时间:2024/06/05 03:50


约瑟夫环问题:N个人围城一圈,开始报数,报到M的人出局,然后重新开始报数,问最后出局的人是谁?


Java版

public class Josepth {    public static void main(String[] args){        int n = 5;//总数        int m = 2;//出列的数字        int[] arr = new int[n];        //初始化数字,也即每个人的编号,从1开始  1....n        for(int i = 1;i <= n ;i++ ){            arr[i-1] = i;        }        System.out.println(Arrays.toString(arr));        int remain = n;//剩余人数        int current = 1;//当前报数        //一直循环直到剩余1人        while(remain > 1){            for(int i = 0;i<n;i++){                if(arr[i] == -1){                    //该位置的人已出局                    continue;                }                //如果当前报数恰好是出列的数字                if(current== m){                    arr[i] = -1;//该位置的人出局                    current = 1;//报数从新从1开始                    remain --;//剩余人数减少                    System.out.println(Arrays.toString(arr));                }                else{                    current++;//报数继续                }            }        }        System.out.println(Arrays.toString(arr));    }}



Python版

total = raw_input("input total number: ")num = raw_input("input hit number: ")print "%s,%s" %(total,num)current = 1index = 1arr = range(1,int(total)+1)while(len(arr)>1):if index == int(num):print "pop",arr[current-1]arr.pop(current-1)index = 1else:index = index +1current = current+1print "current,len(arr)",current,len(arr)if current > len(arr):current = 1print "result:"+str( arr[0])



今日名句:“生生世世,再不生帝王家

原创粉丝点击