设计一个算法,输出1 2 3 4 8 7 6 5 9 10 11 12 16 15 14 13.......

根据题目要求, 我们可以先找一下上面这些数的规律, 不难发现, 上面的这些数字四个四个一组,每四个数字翻转一下, 因此我们可以把它想象成一个二维数组

1    2   3   4

8    7   6   5

9   10 11 12

16 15 14 13

........

上面的数组是蛇形的,因此,我们可以先创建出一个构造函数, 这个构造函数可以接收一个参数, 这个参数就是实例化之后传进来的行数, 首先来说, 这个数组整体是顺序递增的 ,只不过是遇四翻转, 因此, 我们可以在偶数行的时候,调用revers方法,然后把每一行拼接到另一个数组中,然后调用join('')的方法,将数组转成字符串再输出

 1 function snake (n) { //这里接收一个参数n,代表这个二位数组一共有几行
 2     this.array = [] //这里初始化一个空数组array,这个就是我们需要的二维数组
 3     this.arrConect = [] //这里初始化一个空数组arrConect,用来把array这个二维数组拼接起来变成一维数组
 4     this.num = 0 //这里定义一个num变量,初始值为0,用于每一次循环后自增
 5     for(let i = 0 ;i<n;i++) { //这里定义一个for循环
 6         this.arr = [] //for循环每次循环一遍的时候,都初始化一个arr数组
 7         for (let j = 0;j<4;j++) { //这里嵌套一个内部for循环
 8             this.num++ //这个内部的for循环,每循环一次,num的值都自增1
 9             this.arr[j] = this.num //然后将这个num的值放到arr这个数组中
10         }
11         if((i+1)%2 === 0) { //内部的这个for循环结束后,要先判断这个二位数组的行数是奇数行还是偶数行
12             this.arr = this.arr.reverse() //如果是偶数行,则让arr这个数组翻转 比如,在内部for循环结束后,arr变成了[5,6,7,8],但是因为这一行是偶数行,所以需要翻转一下变成[8,7,6,5]
13         }
14         this.array .push(this.arr) //将这个arr数组放入到array这个二维数组
15     }
16 
17     for(let i = 0;i<this.array.length;i++) { //在上面的全部循环结束之后,进入到这个循环中
18         this.arrConect = this.arrConect.concat(this.array[i]) //在这个循环中,我们用arrConect这个数组来循环拼接上面的这个array二维数组
19     } 
20     console.log(this.arrConect.join(''))
21 }
22 
23 var snake = new snake(6) //实例化这个对象

 

posted @ 2018-08-02 09:46  LuckQ  阅读(551)  评论(0编辑  收藏  举报