编写java程序【问题描述】 输入一个自然数N(2<N<9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在 左上角,呈顺时针方向依次放置各元素。 N=3时: 1 2 3 8 9 4 7 6 5 【输入形式】 从标准输入读取一个整数N。 【输出形式】 将结果输出到文件文件file.out。输出符合要求的方阵,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。 【输入样例】 4 【输出样例】输出文件file.out内容为: 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7
时间: 2024-01-02 12:03:29 浏览: 81
下面是实现程序的代码:
```java
import java.io.*;
public class Main {
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[][] arr = new int[n][n];
int num = 1;
int i = 0, j = 0;
arr[i][j] = num++;
while(num <= n * n) {
// 向右走
while(j+1 < n && arr[i][j+1] == 0) {
arr[i][++j] = num++;
}
// 向下走
while(i+1 < n && arr[i+1][j] == 0) {
arr[++i][j] = num++;
}
// 向左走
while(j-1 >= 0 && arr[i][j-1] == 0) {
arr[i][--j] = num++;
}
// 向上走
while(i-1 >= 0 && arr[i-1][j] == 0) {
arr[--i][j] = num++;
}
}
BufferedWriter bw = new BufferedWriter(new FileWriter("file.out"));
for(i = 0; i < n; i++) {
for(j = 0; j < n; j++) {
bw.write(String.format("%5d", arr[i][j]));
}
bw.write("\n");
}
bw.flush();
bw.close();
}
}
```
实现思路:
首先,定义一个n * n的二维数组arr,表示魔方阵。将1放在arr[0][0]中,然后按照顺时针的方向,依次将2~n*n放入到arr中。在放置数字的时候,需要判断当前位置是否已经放置了数字,如果已经放置了数字,则需要按照另外一个方向移动。
最后,将结果输出到文件file.out中,每个数字占5个字符宽度,向右对齐,在每一行末均输出一个回车符。
阅读全文