魔方阵:由n*n个数字所组成的n阶方阵,具有各对角线,各横列与纵行的数字和都相等的性质,称为魔方阵。而这个相等的和称为魔术数字。若填入的数字是从1到n*n,称此种魔方阵为n阶正规魔方阵。

目标:输入一个数n(n<100&&(n%4==0||n%2!=0))请输出该级的魔方阵

样例输入

4

样例输出

16 2 3 13

5 11 10 8

9 7 6 12

4 14 15 1

样例输入

3

样例输出

8 1 6

3 5 7

4 9 2

完成程序源代码

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

该程序只需按照魔方阵数字分布法则安放数字即可。

点击这儿查看完成魔方阵详细教程

Project 3:N级魔方阵的更多相关文章

  1. SDUST 作业10 Problem D 魔方阵

    Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等.如三阶魔方阵: 8 1 6 3 5 7 4 9 2     魔方阵的规律如下: ...

  2. 基于visual Studio2013解决C语言竞赛题之0523魔方阵

     题目

  3. C语言复习---输出魔方阵

    一:奇魔方阵 算法: 1.第一个元素放在第一行中间一列 .下一个元素存放在当前元素的上一行.下一列. .如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下 ...

  4. 牛客网 牛客小白月赛2 A.数字方阵-反魔方阵,梁邱构造法

    天坑未补... 水一波博客,再不写博客就咸成鱼干了,只写题不写题解,过一段时间就忘了自己学过什么了. 最近重点就是把开学以来写的题补出来,没学的就滚去学会啊(= =),填一下坑... 从这篇博客开始, ...

  5. Python旋转魔方阵

    [问题描述]输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在左上角,呈顺时针方向依次放置各元素. N=3时:    1    2    3    8   ...

  6. C语言---魔方阵

    魔方阵的定义:在n*n的方阵中,每一行的和=每一列的和=对角线的和.(本文中涉及的n为大于3的奇数). 例如3*3的魔方阵为: 5*5的魔方阵为: 如何写魔方阵呢? 1.数字1位于第一行的正中间2.下 ...

  7. Groovy解析xml并且注入Project,TestSuite,TestCase级别的custom properties

    import com.eviware.soapui.support.GroovyUtils import groovy.util.XmlParser def groovyUtils = new Gro ...

  8. C++奇数魔方阵

    理解了算法的思想就很简单了, 首先将1放到第一排的中间,然后向左上角走,当行数超过索引,则将该数放到最后一排接下来的一列中去,当列数超过索引,则放到上一排的第一列中去,若都没有超过索引,但是此时的右上 ...

  9. 【4N魔方阵】

    /* 4N魔方阵 */ #include<stdio.h> #include<stdlib.h> #define N 8 int main(void){ int i, j; ] ...

随机推荐

  1. caffe数据读取的双阻塞队列说明

    caffe的datareader类中 class QueuePair { public: explicit QueuePair(int size); ~QueuePair(); BlockingQue ...

  2. 微信客户端+微信公众平台+新浪云SAE+Arduino+WS100(控制LED)

    第一步:准备 1.智能手机微信客户端或微信电脑版 2.注册微信公众平台 https://mp.weixin.qq.com 3.注册新浪账号 http://www.sinacloud.com 4.拥有一 ...

  3. Python Socket 简单聊天室2

    上篇文章写了一个简单的单线程的一问一答的简单聊天室.这次我们使用SocketServer模块搭建一个多线程异步的聊天室. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  4. java中什么样的对象能够进入老年代

    1.大对象:所谓的大对象是指需要大量连续内存空间的java对象,最典型的大对象就是那种很长的字符串以及数组,大对象对虚拟机的内存分配就是坏消息,尤其是一些朝生夕灭的短命大对象,写程序时应避免. 2.长 ...

  5. 用vue写添加数据、删除数据、筛选数据表格

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8&quo ...

  6. mongodb分片部署

    Mongodb 分片部署 配置mongodb集群,比如 在3个server上配置 3 shard的Mongodb集群: 架构: 1.每片数据需要3个mongod server,2个为主从数据节点:1个 ...

  7. jquery左右轮播

    <!--------html代码:-----------> <!DOCTYPE html><html><head><title>carous ...

  8. hdu--5351--MZL's Border

    表示看这篇博客后找到了思路: http://blog.csdn.net/queuelovestack/article/details/47291195 补充一下数据,方便观察规律 m  LBorder ...

  9. Web安全测试——威胁攻防

    SQL注入 部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL In ...

  10. Tp3.2提交表单与操作表单

    笔记笔记 先去建个表———— 然后把我输入的东西 存到表里: <input type="submit" id="tijiao" value="提 ...