Project 3:N级魔方阵
魔方阵:由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级魔方阵的更多相关文章
- SDUST 作业10 Problem D 魔方阵
Description 所谓N阶魔方阵,是一个N*N的方阵,其元素由1到N^2组成,且方阵每行每列以及对角线的元素和相等.如三阶魔方阵: 8 1 6 3 5 7 4 9 2 魔方阵的规律如下: ...
- 基于visual Studio2013解决C语言竞赛题之0523魔方阵
题目
- C语言复习---输出魔方阵
一:奇魔方阵 算法: 1.第一个元素放在第一行中间一列 .下一个元素存放在当前元素的上一行.下一列. .如果上一行.下一列已经有内容,则下一个元素的存放位置为当前列的下一行. 在找上一行.下一行或者下 ...
- 牛客网 牛客小白月赛2 A.数字方阵-反魔方阵,梁邱构造法
天坑未补... 水一波博客,再不写博客就咸成鱼干了,只写题不写题解,过一段时间就忘了自己学过什么了. 最近重点就是把开学以来写的题补出来,没学的就滚去学会啊(= =),填一下坑... 从这篇博客开始, ...
- Python旋转魔方阵
[问题描述]输入一个自然数N(2≤N≤9),要求输出如下的魔方阵,即边长为N*N,元素取值为1至N*N,1在左上角,呈顺时针方向依次放置各元素. N=3时: 1 2 3 8 ...
- C语言---魔方阵
魔方阵的定义:在n*n的方阵中,每一行的和=每一列的和=对角线的和.(本文中涉及的n为大于3的奇数). 例如3*3的魔方阵为: 5*5的魔方阵为: 如何写魔方阵呢? 1.数字1位于第一行的正中间2.下 ...
- Groovy解析xml并且注入Project,TestSuite,TestCase级别的custom properties
import com.eviware.soapui.support.GroovyUtils import groovy.util.XmlParser def groovyUtils = new Gro ...
- C++奇数魔方阵
理解了算法的思想就很简单了, 首先将1放到第一排的中间,然后向左上角走,当行数超过索引,则将该数放到最后一排接下来的一列中去,当列数超过索引,则放到上一排的第一列中去,若都没有超过索引,但是此时的右上 ...
- 【4N魔方阵】
/* 4N魔方阵 */ #include<stdio.h> #include<stdlib.h> #define N 8 int main(void){ int i, j; ] ...
随机推荐
- 27. leetcode 401. Binary Watch
A binary watch has 4 LEDs on the top which represent the hours (0-11), and the 6 LEDs on the bottom ...
- 银河英雄传说[NOI2002]
题目描述 公元五八○一年,地球居民迁移至金牛座α第二行星,在那里发表银河联邦创立宣言,同年改元为宇宙历元年,并开始向银河系深处拓展. 宇宙历七九九年,银河系的两大军事集团在巴米利恩星域爆发 ...
- akoj-1059-Picture
Description 给你一个矩形的宽度和高度,要求按sample output样例输出此矩形. Input 输入包含多组数据,每一组包含两个数N和M( 0 < N ,M , < 75 ...
- hexdump命令的使用
hexdump命令是Linux下的打印16进制的利器,它可以按我们指定的格式输出16进制,特别有用,配合eeprom来用简直是绝配. 今天我们来介绍一个hexdump命令的使用: 首先我们准备一个测试 ...
- java 内存模型的理解
之前一直在实习,博客停写了一段时间,现在秋招开始了,所以辞职回来专心看书,同时将每天的收获以博客的形式记录下来.最近在看jvm相关的书籍,下面对面试中问得最多的部分--java 内存模型. 本篇博客大 ...
- [算法题] Reverse Linked List
题目内容 题目来源:LeetCode Reverse a singly linked list. 题目思路 这个属于经典问题,链表反转的思路基本上已经非常固定了.有两种非常常见的方法:1.三指针法 2 ...
- html常用的基本标签
html的基本标签 一.head部分的标签 1.<!DOCTYPE html>文档类型声明,让浏览器按照html标准对代码进行解释与执行:文档类型声明必不可少,而且,必须在文档最上方:如果 ...
- 移动端JS判断手势方向
原生JS判断手势方向的解决思路: 1.滑动屏幕事件使用html5 的touchstart滑动开始事件和touchend滑动结束事件. 2.方向的判断,以起点做平面坐标系,与终点连线做直线,直线与x正半 ...
- 【MySQL】 清除等待连接
由于MySQL突然新增了很多连接,超出了my.cnf所设置的最大连接数,MySQL服务无法访问,这里通过Shell脚本来删掉Sleep连接 方式1 清除连接进程 #!/bin/bash #------ ...
- 初入angular4——实际项目搭建总结
前言 接到一个pc端后台项目,还会加入两个安卓同事一起学习和做这个项目,需要带一下他们. 既ng1之后,我就没怎么有过其它后台框架的实际项目经验了,期间用的移动端框架也并非vue.angular系列. ...