题目:对于一个n阶矩阵,用米字型分割线把矩阵等分成8个区域,然后从右上角开始,按照逆时针方向给哥哥区域编号为1,2,3,,8,如下图:
矩阵元素需要满足:
1、各区域内的元素值等于区域的编号
2、被分割线穿过的区域等于0
比如输入4,输出:
0 2 1 0
3 0 0 8
4 0 0 7
0 5 6 0
输入6,输出
0 2 2 1 1 0
3 0 2 1 0 8
3 3 0 0 8 8
4 4 0 0 7 7
4 0 5 6 0 7
0 5 5 6 6 0
思路:这题我当时想复杂了,或者说方向错了,我想着和按照圈打印一个二维数组那题一样,一圈一圈打印,但是实际上这题很简单,只要求出来四条分割线的方程即可,四条分割线实际上就是每个区域的边界,遍历元素的时候,只要判断这个元素在那两条分割线以内,他就是这个区域的,打印对应的数字即可。
比如如果元素(i,j)是:j>i,并且j<-i+n+1,那么他就是区域1,打印1即可,如下图,图中圈出来的,就是四条线的方程:
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner cim=new Scanner(System.in);
while(cim.hasNext()){
int n=cim.nextInt();
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(i==j||i+j==n+1||(n%2!=0)&&(j==(n+1)/2||i==(n+1)/2))
System.out.print(0);
else if(j>(n+1)/2&&j<-i+n+1)
System.out.print(1);
else if(j<(n+1)/2&&j>i)
System.out.print(2);
else if(j<i&&i<(n+1)/2)
System.out.print(3);
else if(i>(n+1)/2&&j<-i+n-1)
System.out.print(4);
else if(j>-i+n-1&&j<(n+1)/2)
System.out.print(5);
else if(j<(n+1)/2&&j<i)
System.out.print(6);
else if(j>i&&i>(n+1)/2)
System.out.print(7);
else System.out.println(8);
System.out.print(" ");
}
System.out.println();//换行
}
}
}