题目详情java
peter喜欢玩数字游戏,但数独这样的游戏对他来讲太简单了,因而他准备玩一个难的游戏。游戏规则是在一个N*Nios
的表格里填数,规则:对于每一个输入的N,从左上角开始,老是以对角线为起点,先横着填,再竖着填。这里给了一ide
些样例,请在样例中找到规律并把这个N*N的表格打印出来吧。测试
输入描述:spa
多组测试数据(数据量在100组之内)。每组测试数据只有一行为一个整数N(1<=N<=30),表示表格的大小。code
输出描述:游戏
对于每组输入数据,输出N行,为填完的表格(N行,每行N个整数,每一个数字之间用空格隔开。ci
答题说明it
输入样例:io
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
参考思路: 若是咱们知道了n对应的表格,那么比较容易获得n+1对应的表格,只需将n对应的表格的每一个数加上
2*n + 1, 而后在上面加一行(从1到n+1),左边加一列(1, n+2到2×n + 1),因此能够用record[30][30][30]
作记录,record[i]表示i对应的表格。
#include <iostream> using namespace std; int array[31][31][31]; int n; void init() { array[1][1][1] = 1; for(int i=2; i<=30; i++) { int j, k; for(j=1; j<=i; j++) { array[i][1][j] = j; } for(j=2; j<=i; j++) { array[i][j][1] = i + j - 1; } for(j=2; j<=i; j++) { for(k=2; k<=i; k++) { array[i][j][k] = array[i-1][j-1][k-1] + 2 * i - 1; } } } } int main() { init(); while(cin>>n) { for(int i=1; i<=n; i++) { for(int j=1; j<n; j++) { cout<<array[n][i][j]<<' '; } cout<<array[n][i][n]<<endl; } } return 0; }
import java.io.BufferedInputStream; import java.util.Scanner; public class Main { static int[][][] array = new int[31][31][31]; static void init(){ array[1][1][1]=1; int i,j,k; for(i=2; i<=30; i++){ for(j=1; j<=i; j++){ array[i][1][j]=j; } for(j=2; j<=i; j++){ array[i][j][1] = i + j - 1; } for(j=2; j<=i; j++){ for(k=2; k<=i; k++){ array[i][j][k] = array[i-1][j-1][k-1] + 2 * i - 1; } } } } /** * @param args */ public static void main(String[] args) { init(); Scanner in = new Scanner(new BufferedInputStream(System.in)); while(in.hasNextLine()){ int n = Integer.valueOf(in.nextLine()); for(int i=1; i<=n; i++){ for(int j=1; j<=n; j++){ System.out.print(array[n][i][j] + " "); } System.out.println(); } } } }