每日一题-1

来源:互联网 发布:mac版本千牛 编辑:程序博客网 时间:2024/04/30 08:52
/*
 * 题目详情
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

 */

这是一道较为简单的编程练习,其考察的核心是读写控制。因此,就会有两种方法来解决这个问题:1·顺序写入控制读出;2·控制写入顺序读出。

这和TST型交换机的读写有点类似——他们都是在读写两方面分别进行控制。

方法一:顺序写入控制读出

(暂未实现)

方法二:控制写入顺序读出

public class exercise 
{
int N;
int a[][];
int counter;

public void init(int n)
{
N=n;
a=new int[n][n];
   counter=1;
for(int i=0;i<n;i++)
{
for(int j=i;j<n;j++)
a[i][j]=counter++;
for(int j=i+1;j<n;j++)
a[j][i]=counter++;
}
}
public void show()
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
System.out.print(" ");
System.out.print(a[i][j]);
if(j==N-1)
System.out.println();
}
}
}

public static void main(String[] args)
{
exercise ex1=new exercise();
for(int i=0;i<4;i++)
{
ex1.init(2*i+1);
ex1.show();
}
}

}

运行结果:

 1
 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
 1 2 3 4 5 6 7
 8 14 15 16 17 18 19
 9 20 25 26 27 28 29
 10 21 30 34 35 36 37
 11 22 31 38 41 42 43
 12 23 32 39 44 46 47
 13 24 33 40 45 48 49

0 0
原创粉丝点击