首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

【大神们求算法!】,该如何解决

2013-06-19 
【大神们求算法!!】n 1 得出:1n 2 得出:1 24 3n 3 得出:7 8 96 1 25 4 3n 4 得出:78910612115431216

【大神们求算法!!】
n = 1 得出:

1

n = 2 得出:

1 2
4 3

n = 3 得出:

7 8 9
6 1 2
5 4 3

n = 4 得出:

7  8  9  10
6  1  2  11
5  4  3  12
16 15 14 13

n = 5 得出:

21 22 23 24 25
20 7  8  9  10
19 6  1  2  11
18 5  4  3  12
17 16 15 14 13

大神应该明白吧,就是n*n个数环绕排出来的距形

麻烦点的,可以根据上图的规律,一圈圈回填,找好规律就行。

当n为偶数,一共绕n/2圈,每圈分四步,第i圈的步长是2*i-1。
当n为奇数,去除中心的1不算,一共绕(n-1)/2圈,每圈分四步,第i圈的步长是2*i。
[解决办法]

经过分析我觉得棒棒糖其实只有两种情况:
如图红箭头是n为偶数时:只要在每行最后增加一个数,数的大小从(n-1)*(n-1)+1开始;然后增加一行,数字是继前面的数值增加。
黄色箭头是n为奇数时:只要在每行前面增加一个数,数是从下向上的,大小也是从(n-1)*(n-1)+1开始;然后在最上面增加一行。
我们把这个表格用二维数组表示,解决起来就简单了。
<script type="text/javascript"> 


function bubble(n){
    var X=[];
    function add(l){
        var b=(l-1)*(l-1),arr=[],i=0;
        if(l%2==0){
            for(;i< X.length;i++){
                b++;
                X[i].push(b);//最右边添加一个数
            }
            for(i=l-1;i>=0;i--){
                b++;
                arr[i]=b;//最后一行的数组
            }
            X[X.length]=arr;//最下一行数组加入二维数组里
        }else{
            for(i=X.length;i>0;i--){
                b++;
                X[i-1].unshift(b);//上一行数组向下移一行,并最左边添加一个数
                X[i]=X[i-1];
            }
            for(i=0;i<l;i++){
                b++;
                arr[i]=b;
            }
            X[0]=arr;//最上面添加一行数组加入二维数组里
        }
    }
    for(var o=1;o<=n;o++){
        add(o);//棒棒糖不断的绕大
    }
    document.write('<table border=1>');
    for(var i=0;i< X.length;i++){
        document.write('<tr>');
        for(var j=0;j<X[i].length;j++){
            document.write('<td align="center">'+X[i][j]+'</td>');
        }
        document.write('</tr>');
    }
    document.write('</table>');
}
bubble(6);
bubble(7);
bubble(8);
bubble(9);
bubble(10);
</script>

热点排行