小题目 Part 1

  • 1.  设有n个人依围成一圈,从第1个人开始报数,数到第m个人出列,然后从出列的下一个人开始报数,数到第m个人又出列,…,如此反复到剩下一个人为止。设n个人从1. 2. 3... n编号,求最后一个人的编号。

    private int shuM(int n, int m) {
        int ret = -1;
        int j = 0;
        int i = 0;        
        int[] a = new int[n];
        
        for(i=0;i<n;i++) {
            a[i] = 1;    
        }
        

        boolean find = false;
        while(!find) {
            for (i = 0; i < n; i++) {
                if (a[i] > 0) {
                    if (ret == i) {
                        find = true;
                        break;
                    }

                    ret = i;
                    j++;
                    if (j % m == 0) {
                        a[i] = -1;

                    }
                        
                }
            }
        }
        
        return ret + 1;
    }

你可能感兴趣的:(J#)