四川大学线下编程比赛第一题:数字填充

题目详情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();
        }
        
   } 
 }
}
相关文章
相关标签/搜索