题目详情:
peter喜欢玩数字游戏,但数独这样的游戏对他来说太简单了,于是他准备玩一个难的游戏。游戏规则是在一个N*N的表格里填数,规则:对于每个输入的N,从左上角开始,总是以对角线为起点,先横着填,再竖着填。这里给了一些样例,请在样例中找到规律并把这个N*N的表格打印出来吧。
输入描述:
多组测试数据(数据量在100组以内)。每组测试数据只有一行为一个整数N(1<=N<=30),表示表格的大小。
输出描述:
对于每组输入数据,输出N行,为填完的表格(N行,每行N个整数,每个数字之间用空格隔开。
答题说明:
输入样例:
3
5
输出样例:
1 2 3
4 6 7
5 8 9
1 2 3 4 5
6 10 11 12 13
7 14 17 18 19
8 15 20 22 23
9 16 21 24 25
import java.util.Scanner;
import java.util.Vector;
public class NumberPlace {
public static void main(String args[]) {
Vector<Integer> v = new Vector<Integer>();
System.out.println("Input(以\"0\"结束输入):");
Scanner input = new Scanner(System.in);
int n = input.nextInt();
while(n != 0) {
if(n < 0 || n > 30) {input.close(); return;}
v.add(n);
n = input.nextInt();
}
input.close();
System.out.println("Outout:");
for(int i = 0; i < v.size(); i++)
printTable(fillTable(v.elementAt(i)));
}
static int[][] fillTable(int n) {
int[][] table = new int[n][n];
int number = 0;
for(int i = 0; i < n; i++) {
for(int j = i; j < n; j++)
table[i][j] = ++number;
for(int j = i + 1; j < n; j++)
table[j][i] = ++number;
}
return table;
}
static void printTable(int[][] table) {
int width = Integer.toString(table.length * table.length).length() + 1;
for(int i = 0; i < table.length; i++) {
for(int j = 0; j < table[i].length; j++)
System.out.printf("%" + width + "d", table[i][j]);
System.out.println();
}
}
}