从小到大,再从大到小重复输出,有没有什么好的算法

发布于 2022-09-11 14:25:45 字数 471 浏览 8 评论 0

题目描述

如何循环先正序输出,再倒序输出,
比如: 123321123321

题目来源及自己的思路

想到的办法是给定一个数组到3时候,反转一下

相关代码

arr=[3,2,1]

for(i=0;i<18;i++){
  if(i%3==0){
    arr.reverse()
  }
  console.log(arr[i%3])
}

你期待的结果是什么?实际看到的错误信息又是什么?

上面代码,看起来完美的做到了, 但是为什么还有来提问呢,因为具体应用中是需要一个函数

y=func(x)

x=1,y=1
x=2,y=2
x=3,y=3
x=4,y=3
x=5,y=2
x=6,y=1
这样的无限循环下去,不会写了,求助大家

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

悸初 2022-09-18 14:25:45

没注意审题,修改一下..本来挺好的办法,改成这样就觉得傻傻的了
一般这种操作,我建议使用generator实现,不用取余数的方法是为了避免后期数字太大导致难以预料的问题

function* gen(arr) {
    let array = arr.concat(arr.reverse())
    while (true) {
        for (let j=0;j<array.length;j++){
            yield array[j]
        }
    }
}

generator = gen([1,2,3])

while(true) {
    let value = generator.next().value
    console.log(value)//无限循环
}

性能什么的应该都OK

function* gen(arr) {
    let array = arr.concat(arr.reverse())
    for  (let x=1;true;x++) {
        for (let j=0;j<array.length;j++){
            yield {x:x,y:array[j]}
        }
    }
}

generator = gen([1,2,3])
for (let _=0;true;_++){
    console.log(generator.next().value)
}
止于盛夏 2022-09-18 14:25:45

看来初中数学都有丢光了,

for(var i=1;i<=18;i++){
  console.log(func(i,3))
}

function func(num,n){
  var d = Math.ceil(num/n)-1
  
  return Math.abs(((num-n*d)-(n+1)*(d%2)))
}

https://jsbin.com/tomaxujiza/...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文