COGS 2104. [NOIP2015]神奇的幻方

★   输入文件:2015magic.in   输出文件:2015magic.out   简单对比
时间限制:1 s   内存限制:256 MB

模拟

一开始数组开小了。。

屠龙宝刀点击就送

#include <cstdio>
int n,h[1600],l[1600],hf[45][45];
int main()
{
    freopen("2015magic.in","r",stdin);freopen("2015magic.out","w",stdout);
    scanf("%d",&n);
    hf[1][n/2+1]=1;
    h[1]=1;l[1]=n/2+1;
    for(int i=2;i<=n*n;++i)
    {
        if(h[i-1]==1&&l[i-1]!=n) h[i]=n,l[i]=l[i-1]+1,hf[h[i]][l[i]]=i;
        else if(h[i-1]!=1&&l[i-1]==n) h[i]=h[i-1]-1,l[i]=1,hf[h[i]][l[i]]=i;
        else if(h[i-1]==1&&l[i-1]==n) h[i]=h[i-1]+1,l[i]=l[i-1],hf[h[i]][l[i]]=i;
        else if(h[i-1]!=1&&l[i-1]!=n)
        {
            if(!hf[h[i-1]-1][l[i-1]+1])
            h[i]=h[i-1]-1,l[i]=l[i-1]+1,hf[h[i]][l[i]]=i;
            else h[i]=h[i-1]+1,l[i]=l[i-1],hf[h[i]][l[i]]=i;
        }
    }
    for(int i=1;i<=n;++i)
     for(int j=1;j<=n;++j)
      j!=n?printf("%d ",hf[i][j]):printf("%d\n",hf[i][j]);
    return 0;
}
时间: 2025-01-01 18:35:55

COGS 2104. [NOIP2015]神奇的幻方的相关文章

2015年 day1.1 神奇的幻方

神奇的幻方 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填

P1978 神奇的幻方

P1978神奇的幻方 描述 幻方是一种很神奇的 N ∗ N 矩阵:它由数字 1,2,3, … … , N ∗ N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1 写在第一行的中间. 之后,按如下方式从小到大依次填写每个数 K(K = 2,3, … , N ∗ N) : 若 (K − 1) 在第一行但不在最后一列,则将 K 填在最后一行, (K − 1) 所在列的右一列: 若 (K − 1) 在最后一列但不在第一行,则将 K 填

noip2015day1 T1 4510 神奇的幻方

4510 神奇的幻方 noip2015day1 T1 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1写在第一行的中间.之后,按如下方式从小到大依次填写每个数(K= 2,3, … ,N∗N ): 1.若 (K−1)在第一行但不在最

[NOIP2015] 提高组 洛谷P2615 神奇的幻方

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

洛谷-神奇的幻方-NOIP2015提高组复赛

题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第一列,(K−1)所在行的上一行: 3.若(K−1)在第一行最后一列,则将K填在(K−1)

洛谷——P2615 神奇的幻方 【Noip2015 day1t1】

https://www.luogu.org/problem/show?pid=2615 题目描述 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将1写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K=2,3,…,N*N): 1.若(K−1)在第一行但不在最后一列,则将K填在最后一行,(K−1)所在列的右一列: 2.若(K−1)在最后一列但不在第一行,则将K填在第

东方14模拟赛之noip2015/day1/3/神奇的幻方

总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  128000kB 描述 幻方是一种很神奇的N*N 矩阵:它由数字 1,2,3, … …,N*N 构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1 写在第一行的中间. 之后,按如下方式从小到大依次填写每个数K(K= 2,3, …,N*N ): 若 (K−1) 在第一行但不在最后一列,则将K填在最后一行,(K−1) 所在列的右一列: 若 (K−1) 在最

【noip2015】神奇的幻方

题目描述 幻方是一种很神奇的 N ? N 矩阵:它由数字 1,2,3, - - , N ? N 构成,且每行.每列及两条对角线上的数字之和都相同. 当 N 为奇数时,我们可以通过以下方法构建一个幻方: 首先将 1 写在第一行的中间. 之后,按如下方式从小到大依次填写每个数 K(K = 2,3, - , N ? N) :1. 若 (K ? 1) 在第一行但不在最后一列,则将 K 填在最后一行, (K ? 1) 所在列的右一列:2. 若 (K ? 1) 在最后一列但不在第一行,则将 K 填在第一列,

神奇的幻方(NOIP2015)(真&#183;纯模拟)

原题传送门 这是道SB模拟题,NOIP--难度 直接贴代码 #include<iostream> #include<cstdio> using namespace std; int n,num=1,zong,heng; int f[41][41]; int main(){ scanf("%d",&n); heng=n/2+1; zong=1; while(num<=n*n){ f[heng][zong]=num; if(f[heng+1][zong