一个JS的问题,哪位大神来救救我这个小白啊

时间:2021-12-29 09:27:17
一个JS的问题,哪位大神来救救我这个小白啊
之前这论坛上看到的就是下面这个方法
<script>
var n = parseInt(prompt("请输入n","8"), 10);
var m = parseInt(prompt("请输入m","3"), 10);
var arr = [];
for (var i = 1; i <= n; i++) {
    arr.push(i);
}
var p = 0;
for (var i = 1; i < n; i++) {
    p = (p+m-1)%arr.length;
    var d = arr[p];
    arr.splice(p,1);
    document.write("第",i,"轮取出",d,",剩余:",arr,"<br>");
}
</script>
有没有哪位大佬能不用parselnt而用push 或shift 以及其他的标签来实现这个题目的。谢谢!!!

6 个解决方案

#1


想不通shift用来干嘛。。删除第一个元素,到时又得压回不需要删除的元素

Web开发学习资料推荐
easyui datebox只显示年月选择,隐藏日期
asp网站使用utf-8编码注意事项

#2


6不用parseInt(),改成 -0 或者 *1 也行。
var n = prompt("请输入n","8")-0;
var m = prompt("请输入m","3")-0;

移除数组元素应该用splice(),而shift()只是移除第一个元素在这个题目中并不适用。

#3


换一种解法。这个应该是楼主要求的

var n = prompt("请输入n","8")-0;
var m = prompt("请输入m","3")-0;
var arr = [];
for (var i = 1; i <= n; i++) {
arr.push(i);
}
var p = 0;
while (arr.length>1) {
var d = arr.shift();
p++;
document.write("第",p,"次,数到",d);
if (p%m==0)
document.write("并将其取出,剩余:",arr);
else
arr.push(d);
document.write("<br>");
}
document.write("最后剩余:",arr[0]);

#4


但是-0的作用是什么 啊

#5



<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>从数组中筛选比赛号码</title>
<style>

</style>
</head>
<body>
<input type="number" id="count" placeholder="请输入球的个数" value="8">
<input type="number" id="step" placeholder="请输入提取间隔数" value="3">
<button>查找号码</button>
<div id="result"></div>

<script>
document.getElementsByTagName('button')[0].onclick = function(){
var count = document.getElementById('count').value * 1;
var step = document.getElementById('step').value * 1;
if(count && step){
var array = [];
for(var i = 1; i <= count ; i ++)array.push(i);

var index = 0,result = [];
while(array.length > 1){
var first = array.shift();
    index ++;
    result.push(`<p>第${p}次,数到${first}`);

    if (index % step == 0)
        result.push(`,并将其取出,剩余:${array.toString()}`);
    else
        array.push(first);

    result.push('</p>');
}

document.getElementById('result').innerHTML = result.join('');
}
}
</script>
</body>
</html>

#6


呀,三楼已经有答案了,就以三楼的吧。

#1


想不通shift用来干嘛。。删除第一个元素,到时又得压回不需要删除的元素

Web开发学习资料推荐
easyui datebox只显示年月选择,隐藏日期
asp网站使用utf-8编码注意事项

#2


6不用parseInt(),改成 -0 或者 *1 也行。
var n = prompt("请输入n","8")-0;
var m = prompt("请输入m","3")-0;

移除数组元素应该用splice(),而shift()只是移除第一个元素在这个题目中并不适用。

#3


换一种解法。这个应该是楼主要求的

var n = prompt("请输入n","8")-0;
var m = prompt("请输入m","3")-0;
var arr = [];
for (var i = 1; i <= n; i++) {
arr.push(i);
}
var p = 0;
while (arr.length>1) {
var d = arr.shift();
p++;
document.write("第",p,"次,数到",d);
if (p%m==0)
document.write("并将其取出,剩余:",arr);
else
arr.push(d);
document.write("<br>");
}
document.write("最后剩余:",arr[0]);

#4


但是-0的作用是什么 啊

#5



<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>从数组中筛选比赛号码</title>
<style>

</style>
</head>
<body>
<input type="number" id="count" placeholder="请输入球的个数" value="8">
<input type="number" id="step" placeholder="请输入提取间隔数" value="3">
<button>查找号码</button>
<div id="result"></div>

<script>
document.getElementsByTagName('button')[0].onclick = function(){
var count = document.getElementById('count').value * 1;
var step = document.getElementById('step').value * 1;
if(count && step){
var array = [];
for(var i = 1; i <= count ; i ++)array.push(i);

var index = 0,result = [];
while(array.length > 1){
var first = array.shift();
    index ++;
    result.push(`<p>第${p}次,数到${first}`);

    if (index % step == 0)
        result.push(`,并将其取出,剩余:${array.toString()}`);
    else
        array.push(first);

    result.push('</p>');
}

document.getElementById('result').innerHTML = result.join('');
}
}
</script>
</body>
</html>

#6


呀,三楼已经有答案了,就以三楼的吧。