js的循环,感觉有点难

2016/12 01 14:12
此文章不得转载,如有需要请联系网站管理员。

一度的温暖,一百度的爱情,来自于ca788亚洲城娱乐的点点滴滴

有编号1-90号的90个小冤家,围成一个圈 从1号末尾报数,1234567循环报数,喊到7的小冤家加入游戏,最后剩下的6个小冤家的编号(例1234567,7号加入,1234567,14号加入。。。),哪位大神帮忙写下,

代码是写出来,头脑也写出来了,不过貌似不是很好懂,自己用小数据来算一下应该能明白吧。90 集团算出来答案是 [ 15, 48, 53, 64, 73, 85 ],不知道对不同错误。

const count = 90;
// 发生一个指定长度的数组,编号即序号 + 1
let data = Array.applynull, { length: count }.mapv, i => i + 1;

// 第 7 个加入,相称于地位(索引 + 1)除以 7 余数为 0 的时分加入
// 前次数到最后会有 lastRest 集团不够 7 个
// 第一次相称于 lastRest 为 0,即前次恰好数完,最后一个加入的情况
let lastRest = 0;
while data.length > 6 {
    // 谋略应该加入时的余数,由于前次剩下 lastRest 集团(last < 7)
    // 以是要从末尾再数 7 - lastRest 个,登基置是 7 - lastRest。
    // 又由于索引是从 0 末尾,地位从 1 末尾,以是经过地位谋略索引需求 -1,
    // 以是谋略索引是 地位 - 1,有可以为负,取正便是 地位 - 1 + 7 % 7
    // 代上天位算法便是 7 - lastRest - 1 + 7 % 7,即 7 - lastRest + 6 % 7
    const special = 7 - lastRest + 6 % 7;

    // 根据这次一共的人数,算会剩下多少集团不够 7 人组
    // 由于有前次剩下的,以是要加出去一同算
    lastRest = data.length + lastRest % 7;

    // 把索引 i,除以7 余 special 的过滤失,相称于留下 != special 的
    data = data.filterv, i => i % 7 != special;
}

console.logdata;

var ss = [];
//先生编号
forvar i=1;i<=90;i++{
    ss.pushi;
}

forvar i=1;i<=ss.length,ss.length>6;{
    ifi%7==0{
        ss.splicei-7,7;//不为7的曾经加到数组后面,已报数的可以全部删除
        i=1;//重置i
    }else{
        ss.pushss[i-1];//留上去的先生加到数组后面去
        i++;
    }
}

console.logss;

判别以后行列步队的地位是不是到了第七个,是的话就加入以后循环重新从”1″末尾,同时还要把第七个从行列步队中移除,如许子不断循环下去,当行列步队的长度只剩下6个的时分就加入整个循环

这个有点像是约瑟夫斯题目
我用数组写了下,不过以为用链表最好

function array_numaa,y{
    var num=1;
    whileaa.length>6{
        fori=0;i<aa.length;i++{
            ifnum==y{aa[i]=0;num=1;}else{num++}
        }
        var bb=aa.filterfunctionx{ifx{return true}else{return false}}
        aa=bb;
    }
    console.logaa
}
array_numarr,7//这里的arr是1-90的数组

哈,我试着写一个以array list为根底,空间宏大度比较小(不用重新天生list)但工夫宏大度稍大的,逻辑容易懂的。要想空间宏大度和工夫宏大度都比较小,最好用 linked list。

"use strict"

function filterq, order {
    // 本次循环之后留上去的人数
    let stayCount = 0

    q.forEache, i => {
        if e != null {
            order ++
            // 当序数满7,重新末尾数
            if order === 7 {
                // 赋值为null,即加入下一轮游戏
                q[i] = null
                order = 0
            } else {
                // 序数不是7的倍数,留下
                stayCount ++
            }
        }
    }
    return {
        order, // 本次循环之后最后一集团的序号, 如第一次的90 = 84 + 6 = 7*12 + 6,序号是:6
        stayCount
    }
}

// 初始化一个 1 - 90 的数组
var queue = new Array90.fill0.mape,i => i+1
var stay = queue.length
var order = 0

whilestay >= 7 {
    let r = filterqueue, order
    stay = r.stayCount
    order = r.order
}

console.logqueue.filtere, i => e !== null

(看完/读完)这篇文章有何感想! 来看看ca788亚洲城娱乐是怎么评论的吧!

--转载请注明: www.ca788.com#亚洲城ca788手机版官网 » js的循环,感觉有点难

发表评论

(必填)