zoukankan      html  css  js  c++  java
  • nyoj 734奇数阶魔方

    奇数阶魔方

    时间限制:1000 ms  |  内存限制:65535 KB

    难度:3

    描述

    一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方。n为奇数时我们有1种构造方法,叫做右上方,例如下面给出n=357时的魔方.
    3
    8 1 6
    3 5 7
    4 9 2
    5
    17 24 1 8 15
    23 5 7 14 16
    4 6 13 20 22
    10 12 19 21 3
    11 18 25 2 9
    7
    30 39 48 1 10 19 28
    38 47 7 9 18 27 29
    46 6 8 17 26 35 37
    5 14 16 25 34 36 45
    13 15 24 33 42 44 4
    21 23 32 41 43 3 12
    22 31 40 49 2 11 20
    1行中间的数总是1,最后1行中间的数是n^2,他的右边是2,从这三个魔方,你可看出右上方是何意。 

    输入

    包含多组数据,首先输入T,表示有T组数据.每组数据1行给出n(3<=n<=19)是奇数。

    输出

    对于每组数据,输出n阶魔方,每个数占4格,右对齐

    样例输入

    2

    3

    5

    样例输出

       8   1   6

       3   5   7

       4   9   2

      17  24   1   8  15

      23   5   7  14  16

       4   6  13  20  22

      10  12  19  21   3

      11  18  25   2   9

    #include<stdio.h>
    int main()
    {
      int n,N;
      scanf("%d",&N);
      while(N--)
      {
      
      scanf("%d",&n);
      int i=0,j=(n-1)/2,c[20][20]={0},a=2;
      	c[i][j]=1;
      while(a<=n*n)
      {
        --i;
      	++j;
      	if(i<0&&j<=n-1) {i=n-1;c[i][j]=a;}
      	else if(j>n-1&&i>=0){j=0;c[i][j]=a;}
      	else if(c[i][j]!=0||(i<0&&j>n-1)){i+=2;j-=1;c[i][j]=a;}
      	else c[i][j]=a;
      	a++;
      	}	
      		for(i=0;i<=n-1;i++)
    		{	
    			for(j=0;j<=n-1;j++)
    			{
    				printf("%4d",c[i][j]);
    				if(j==n-1)printf("
    ");
    			}
    		}
    }
      return 0;
    }         
    

      

  • 相关阅读:
    JavaWeb工程中web.xml基本配置
    json
    理解文档对象模型(3)
    关于经验模态分解的混叠模态(mode mixing)问题
    android ListView SimpleAdapter 带图片
    JAVA的类和对象
    JAVA的循环结构进阶
    JAVA的数组
    JAVA的循环结构
    JAVA的选择结构(二)
  • 原文地址:https://www.cnblogs.com/zhangliu/p/7052706.html
Copyright © 2011-2022 走看看