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

    奇数阶魔方

    时间限制:1000 ms  |  内存限制:65535 KB
    难度:3
    描述
    一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方。n为奇数时我们有1种构造方法,叫做“右上方” ,例如下面给出n=3,5,7时的魔方.
    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 <cstdio>
    #include <cmath>
    #include <queue>
    #include <cstring>
    #include <stack>
    #include <map>
    #include <vector>
    #include <iostream>
    #include <algorithm>
    #define MAX_N 1005
    #define MIN(a, b)   (a < b)? a: b
    #define MAX(a, b)   (a > b)? a: b
    using namespace std;
    int pos[MAX_N][MAX_N];
    int main() {
        int t, n;
        scanf("%d", &t);
        while (t--) {
            memset(pos, 0,sizeof(pos));
            scanf("%d", &n);
            int temp = 1, cnt = 0, cut = n / 2;
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    pos[cnt][cut] = temp++;
                    if (j == n - 1) {
                        cnt += 1;
                        cut;
                        if (cnt > n - 1) {
                            cnt = n - cnt;
                        }
                        continue;
                    }
                    cnt--, cut++;
                    if (cnt < 0) {
                        cnt += n;
                    }
                    if (cut > n - 1) {
                        cut = n - cut;
                    }
    
                }
            }
            for (int i = 0; i < n; i++) {
                for (int j = 0; j < n; j++) {
                    printf("%4d", pos[i][j]);
                }
                printf("
    ");
            }
        }
        return 0;
    }
    


  • 相关阅读:
    转:页面Postback后定位滚动条不再难
    c:\windows\microsoft.net\framework\v1.1.4322\Config\machine.config 行: 198
    WebService相关概念和原理(中间层)
    JS 根据DropDownList的Text选中某一项
    javascript事件列表解说
    AJAXUpdateProgress设置CSS元素POSITION的使动画居中 & loading的Info
    ASP.NET2.0 Skin+CSS 测试
    C# 日期格式转换(转)
    编写代码创建DataTable对象
    ToString 格式化数值
  • 原文地址:https://www.cnblogs.com/cniwoq/p/6770955.html
Copyright © 2011-2022 走看看