【大神们求算法!!】
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。
[解决办法]
<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>