回形数
题目描述
输入整数n,生成n*n的二维数组,元素按照顺时针顺序从1递增。例如输入3,得到
1 2 3
8 9 4
7 6 5
思路
定义四个变量up、down、left、right,分别表示数组的最上面、最下面、最左、最右的索引。
从左到右填入第一行,然后将第一行剥离,即up++;判断up>down则break;
从上到下填入最右列,然后将最右列剥离,即right–;判断left>right则break;
从右到左填入最下行……
从下到上填入最左列……
代码
import java.util.Scanner;
public class HuiXingShu {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int up=0;
int left = 0;
int down=n-1;
int right = n-1;
int[][] array = new int[n][n];
int start=1;
while(true){
for (int i = left; i < right+1; i++) {
array[up][i] = start;
start++;
}
up++;
if(up>down){
break;}
for (int i = up; i < down+1; i++) {
array[i][right] = start;
start++;
}
right--;
if(right<left){
break;
}
for (int i = right; i > left-1; i--) {
array[down][i] = start;
start++;
}
down--;
if(up>down){
break;
}
for (int i = down; i > up-1; i--) {
array[i][left] = start;
start++;
}
left++;
if(right<left){
break;
}
}
}
}