给你一个整数n,输出n∗n的蛇形矩阵。
1027-蛇形矩阵_牛客竞赛语法入门班数组字符串习题 (nowcoder.com)
输入描述:
输入一行,包含一个整数n
输出描述:
输出n行,每行包含n个正整数,通过空格分隔。 1<=n<=1000
示例1
输入
4
输出
1 2 6 7 3 5 8 13 4 9 12 14 10 11 15 16
将数组按对角线划分(例1):
按顺序从array[0][0]开始到arraya[3][3]
可以分为7层,上链接不是 上图片:(没0序号就手写了哈哈)
浅分类一下:
可得规律(注意哈 ,超过n-1时规律就不一样了)
1. i<n时
奇数:array[j] [i-j]
偶数:array[i-j] [j]
for(int j=0;j<=i;j++){ if((i&1)==1){//i为奇数 array[j][i-j]=++count; }else{//i为偶数时 array[i-j][j]=++count; } }
2. i>=n&&i<=2*n-1时
奇数:array[j] [i-j] (j不可大于等于n)
偶数:array[i-j] [j]
for(int j=i-n+1;j<n;j++){ if((i&1)==1){ array[j][i-j]=++count; }else{ array[i-j][j]=++count; } }
输出结果:
import java.util.*;
public class Main{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int array[][]=new int [n][n];
array[0][0]=1;
int count=1;
for(int i=1;i<2*n-1;i++)
{
if(i<n){
for(int j=0;j<=i;j++){
if((i&1)==1){//i为奇数
array[j][i-j]=++count;
}else{//i为偶数时
array[i-j][j]=++count;
}
}
}else{
for(int j=i-n+1;j<n;j++){
if((i&1)==1){
array[j][i-j]=++count;
}else{
array[i-j][j]=++count;
}
}
}
}
StringBuilder sb=new StringBuilder();
for(int k=0;k<n;k++){
for(int j=0;j<n;j++){
sb.append(array[k][j]+" ");
}
sb.append("\n");
}
System.out.print(sb);
}
}