码迷,mamicode.com
首页 > 其他好文 > 详细

HDU ACM 1998奇数阶魔方

时间:2015-03-10 19:24:20      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:acm   c++   c   数学   算法   

方法:

1、第一个数填第一行正中间。

2、以后依次往上一行后一列填,并遵循如下规则:

a、如果往上超出第一行则往最后一行开始;

b、如果往右超出最后一列则往第一列开始;

c、右上角填后要往下一行开始,列不变;

d、如果所要填数之前已填,则往他下面填。

3、循环第二步,直到方格填满。


#include<iostream>
using namespace std;

int main() 
{
    int a[20][20];
    int T,n,i,j,k;

    cin>>T;
    while(T--)
    {
        cin>>n;

        memset(a,0,sizeof(a));
        k=1;
        i=1;
        j=n/2+1;
        a[i][j]=k++;
        while(k<=n*n)
        {
            i--;j++;

            if(i==0 && j==n+1) {i+=2;j--;}
            if(i<1) i=n;
            if(j>n) j=1;
            if(a[i][j]) {i+=2;j--;}
            a[i][j]=k++;
        }
        for(i=1;i<=n;i++)
        {
            for(j=1;j<n;j++)
                printf("%4d",a[i][j]);
            printf("%4d\n",a[i][j]);
        }
    }
    return 0;
} 


HDU ACM 1998奇数阶魔方

标签:acm   c++   c   数学   算法   

原文地址:http://blog.csdn.net/a809146548/article/details/44178527

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!