Skip to content

Instantly share code, notes, and snippets.

@jikeytang
Created May 29, 2014 01:06
Show Gist options
  • Save jikeytang/cfbc2e21db68f207eb46 to your computer and use it in GitHub Desktop.
Save jikeytang/cfbc2e21db68f207eb46 to your computer and use it in GitHub Desktop.
[ Javascript ] - 20140529-题目2
n个数字(0,1,...,n-1)形成一个圆圈,从数字0开始,
每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字),
当一个数字删除后,从被删除数字的下一个继续删除第m个数字,
求出这个圆圈中剩下的最后一个数字
PS:
1. 回复时注意加上下面这句话,才会有语法高亮或格式缩进。
```javascript
// you code
```
2. 粘贴代码时请使用shift+tab,缩进前面的空白。
@wzc602003869
Copy link

function test(m,n){
    var arr1 = [],arr2=[],s=0;
    for(var i = 0;i<n;i++){
        arr1.push(i);
    };
    for(var j= 0;j<m*n;j++){
        arr2=arr2.concat(arr1);
    };
    for(var j=0;j<n-1;j++){
        s+=m-1;
       var t =arr2.splice(s,1);

        while(arr2.indexOf(t[0])!=-1){
            arr2.splice(arr2.indexOf(t[0]),1);
        };
    };
alert(arr2[0]);
}
test(4,4);

@sunnylost
Copy link

//ಥ_ಥ
function circle(n, m) {
    var arr = [];
    var cur, next, pre;

    for(var i = 0; i < n; i++) {
        arr[i] = {
            index: i,
            pre: i == 0 ? (n - 1) : (i - 1),
            next: i == (n - 1) ? 0 : (i + 1)
        };
    }

    cur = arr[0];

    while(n != 1) {
        for(i = 0; i <= m; i++) {
            cur = arr[cur.next];
        }

        pre  = arr[cur.pre];
        next = arr[cur.next];

        pre.next = next.index;
        next.pre = pre.index;

        if(pre.index == next.index) {
            return pre.index;
        }
        n--;
    }
}

console.log(circle(10, 5));

@styling
Copy link

styling commented May 30, 2014

function xx (a, b) {
    var arr = [];
    for(var i = 0; i < a; i++){
        arr.push(i);
    }
    arr.splice(b, 1)
    while(arr.length > 1){
        arr.splice(b%arr.length, 1);
    }
    console.log(arr[0]);
}
不知道对不

@wsgouwan
Copy link

wsgouwan commented Dec 5, 2014

        function getLast( n , m ){
        var arr = [];
        for( var i =0; i < n; i ++ ){
            arr.push(i);
        }
        var _target = 0;

        while( arr.length > 1 ){
            // 判断需要删除的 当前的第m个后的在那里,并把这个赋值给_target
            if( arr.length - _target > m ){
                arr.splice(_target + m - 1 , 1) ;
                _target = _target + m - 1 ;
            }else if( arr.length - _target == m ){
                arr.splice(_target + m - 1 , 1) ;
                _target = 0 ;
            }else{
                var temp = (m - arr.length + _target - 1)%arr.length ;
                arr.splice(temp, 1);
                _target = temp ;
            }
        };
        return arr[0]
    };
    console.log( getLast( 8 ,7) )

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment