JavaScript解决约瑟夫环

JavaScript解决约瑟夫环

问题:100个人手拉手围成一个圆,开始数数,数到3的倍数的人退出,最后剩下一个人的是之前的第几个人?

该问题我们可以用数组来解决

思路:

一、我们先新建一个空数组,在数组中存入1-100的数值

二、把三的倍数的元素改为0,这时当元素为0时就不参加游戏

注意:当我们循环时,索引是一直在累加的。

所以当索引为100时,应该返回到第一个元素,即1;

当索引为101时,返回第二个元素:2;

当索引为102时,因为元素3在第一轮游戏时就已经变成0,所以跳过,第三个元素就变成4。

以此类推…我们可以用arr[index%100]来表示元素

//1.存1-100到新数组里
var arr = [];
    for (var i = 1; i <= 100; i++) {
    
    
        arr.push(i);
    };
    //索引
    var index = 0;
    //出局人数
    var out_num = 0;
    //报数人数
    var baoshu = 1;
//2.建立循环,只要出局人数不到100就一直继续
    while (out_num < 100) {
    
    
        //只要元素不为0,游戏就继续
        if (arr[index % 100] != 0) {
    
    
            //报到3的倍数的人,元素改为0
            if (baoshu % 3 == 0) {
    
    
                console.log("是第" + arr[index % 100] + "个人出局");
                //此时记录出局人数+1
                out_num++;
                arr[index % 100] = 0;
                //报数人数也要+1
                baoshu++;
            } else {
    
    
                //注意不为3的时候也要报数
                baoshu++;
            }
        }
        //索引会一直往后加
        index++;
    };

猜你喜欢

转载自blog.csdn.net/weixin_42567822/article/details/125153071