问题描述:
08 01 06
03 05 07
04 09 02
初始值1,其数组下标为[0][1],依次输入2、3、4、5、6、7、8、9,生成结构如上所示。
构造规则:
从初始位置出发,每次检查当前位置的右上角格子的行列情况:(行减一,列加一)
1、行越界,列正常时;跳到当前列的最后一行,进行赋值。
2、行正常,列越界时;跳到当前行的第一列,进行赋值。
3、行、列都正常时;又分为两种情况:1)该格中无值,则直接赋值;2)该格中有值,则回退到上一格(左下角)的同列下方一格,进行赋值。
4、行、列都不正常时;则回退到上一格(左下角)的同列下方一格,进行赋值。
代码:
package com.FM.Javase.work0824;
import java.util.Scanner;
public class SquaredPaper {
public static void main(String[] args) {
int[][] a=new int[3][3];
int i=0;//行
int j=1;//列
int y=1;//已输入的数字个数
a[i][j]=1;//初始位置
Scanner sc=new Scanner(System.in);
while(y<9){
i-=1;//行回退一格
j+=1;//列前进一格
if (i<0&&j<3){//行越界,列正常
i=2;//回到当前列的最后一行
System.out.println("请输入下一个数字:");
a[i][j]=sc.nextInt();//接受数字
y++;//已输入的数字个数加一
continue;//结束本次循环
}else if (i>=0&&j>2){//行正常,列越界
j=0;//回到当前行的第一列
System.out.println("请输入下一个数字:");
a[i][j]=sc.nextInt();//接受数字
y++;//已输入的数字个数加一
continue;//结束本次循环
}if (i>=0&&j<3){//行、列都正常
if (a[i][j]!=0){//当前位置已有数字
i+=2;//行回退到上一个位置的下一行
j-=1;//列回退到上一列
System.out.println("请输入下一个数字:");
a[i][j]=sc.nextInt();//接受数字
y++;//已输入的数字个数加一
continue;//结束本次循环
}else{//当前位置没有数字
System.out.println("请输入下一个数字:");
a[i][j]=sc.nextInt();//接受数字
y++;//已输入的数字个数加一
continue;//结束本次循环
}
}else if (i<0&&j>2){//行、列都不正常
i+=2;//行回退到上一个位置的下一行
j-=1;//列回退到上一列
System.out.println("请输入下一个数字:");
a[i][j]=sc.nextInt();//接受数字
y++;//已输入的数字个数加一
continue;//结束本次循环
}
}
System.out.println("输入完成!");
for (int m = 0; m < 3; m++) {
for (int n = 0; n < 3; n++) {
System.out.print(a[m][n]+" ");
}
System.out.println();
}
}
}
运行结果:
扩展(五行五列)
代码:
package com.FM.Javase.work0824;
public class SquaredPaper01 {
public static void main(String[] args) {
int[][] a=new int[5][5];
int i=0;//行
int j=2;//列
a[i][j]=1;//初始位置
for (int p = 2; p < 26; p++) {
i-=1;//行回退一格
j+=1;//列前进一格
if (i<0&&j<5){//行越界,列正常
i=4;//回到当前列的最后一行
a[i][j]=p;//接受数字
continue;//结束本次循环
}else if (i>=0&&j>4){//行正常,列越界
j=0;//回到当前行的第一列
a[i][j]=p;//接受数字
continue;//结束本次循环
}if (i>=0&&j<5){//行、列都正常
if (a[i][j]!=0){//当前位置已有数字
i+=2;//行回退到上一个位置的下一行
j-=1;//列回退到上一列
a[i][j]=p;//接受数字
continue;//结束本次循环
}else{//当前位置没有数字
a[i][j]=p;//接受数字
continue;//结束本次循环
}
}else if (i<0&&j>4){//行、列都不正常
i+=2;//行回退到上一个位置的下一行
j-=1;//列回退到上一列
a[i][j]=p;//接受数字
continue;//结束本次循环
}
}
for (int m = 0; m < 5; m++) {
for (int n = 0; n < 5; n++) {
System.out.print(a[m][n]+" ");
}
System.out.println();
}
}
}
运行结果: