四川大學線下編程比賽第一題:數字填充

題目詳情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();
        }
        
   } 
 }
}
相關文章
相關標籤/搜索