螺旋矩阵


/**
* 1 16 15 14 13
* 2 17 24 23 12
* 3 18 25 22 11
* 4 19 20 21 10
* 5 6 7 8 9
*/
public static void print(int n){

int[][] xy = new int[n][n];
int circle = n / 2;//圈数
int x = 0;
int y = 0;
int start = 0;
for(int i = 0; i < circle; i++){
int step = n - i*2;//步数
//左
for(int k = 0; k < step;k++){
xy[x][y] = ++start;
if(k < step -1){
++y;
}
}

//下右都是一样的步数
step = step - 1;

//横坐标向右移一位
++x;
//下
for(int k = 0; k < step; k++){
xy[x][y] = ++start;
if(k < step - 1){
++x;
}
}

//纵坐标向上移一位
--y;
//右
for(int k = step; k > 0; k--){
xy[x][y] = ++start;
if(k != 1){
--y;
}
}

//横坐标向左移一位
--x;
//上
step = step - 1;
for(int k = step; k > 0; k--){
xy[x][y] = ++start;
if(k != 1){
--x;
}
}
//移位到下一圈
++y;
}

if(n % 2 > 0){
xy[x][y] = ++start;
}

for(int i = 0; i < xy.length; i++){
for(int j = 0; j < xy.length; j++){
System.out.printf("%02d ",xy[j][i]);
}
System.out.println("");
}
}

public static void main(String[] args) {
Test2.print(5);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值