題目詳情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(); } } } }