数字填充

来源:互联网 发布:路由器选择算法 优点 编辑:程序博客网 时间:2024/04/29 11:46

数字填充

题目详情:

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();
  }
 }
}



0 0
原创粉丝点击