输出n阶“魔方阵”

魔方阵:每一行、每一列和对角线之和均相等。

程序如下:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 int main()
 4 {
 5     //输出魔方阵
 6     int i,j,k,p,n,a[15][15];
 7     p=1;//用于判断输入的数字是否符合条件
 8     while(p==1){
 9         printf("enter n (n=1--15):");
10         scanf("%d",&n);
11         if((n!=0)&& (n<=15) && (n%2!=0))
12             p=0;
13     }
14     //初始化
15     for(i=1;i<=n;i++)
16         for(j=1;j<=n;j++)
17             a[i][j]=0;
18     j=n/2 + 1;
19     a[1][j]=1;
20     for(k=2;k<=n*n;k++){
21         i=i-1;
22         j=j+1;
23         //确立数放置的位置
24         if((i<1) && (j>n)){
25             i=i+2;
26             j=j-1;
27         }
28         else{
29             if(i<1) i=n;
30             if(j>n) j=1;
31         }
32         //置数
33         if(a[i][j]==0){
34             a[i][j]=k;
35         }else{//位置上已有数
36             i=i+2;
37             j=j-1;
38             a[i][j]=k;
39         }
40     }
41     //输出魔方阵
42     for(i=1;i<=n;i++){
43         for(j=1;j<=n;j++)
44             printf("%5d",a[i][j]);
45         printf("\n");
46     }
47     system("pause");
48     return 0;
49 }
时间: 2024-08-29 17:52:02

输出n阶“魔方阵”的相关文章

n阶魔方阵(奇数阵)的输出

需求 要求输出1~n2的自然数构成的魔方阵. STEP 1 什么是魔方阵? 魔方阵,古代又称"纵横图",是指组成元素为自然数1.2-n2的平方的n×n的方阵,其中每个元素值都不相等,且每行.每列以及主.副对角线上各n个元素之和都相等. STEP 2 魔方阵的规律是什么? 此处先写简单一点的奇阶魔方阵,偶数阶的算法更复杂,暂不讨论. 奇阶魔方阵的排列方法: ⑴将1放在第一行中间一列: ⑵从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1: ⑶如果上

任意阶魔方阵(幻方)的算法及C语言实现

写于2012.10: 本来这是谭浩强那本<C程序设计(第四版)>的一道课后习题,刚开始做得时候去网上找最优的算法,结果发现奇数和双偶数(4的倍数)的情况下算法都比较简单,但是单偶数(2的倍数但不是4的倍数)情况一直找不到明确的算法,就连百度百科对这一问题的解释也是“因非四的倍数作法相当复杂,在此只介绍四的倍数的作法”,而且连谭浩强那本书给的答案中竟然也变相的限定了n只能为奇数(题目并未说明).在广泛查找资料后,发现了一篇由中南大学信息科学与工程学院某教授和研究生撰写的论文,介绍了任意阶幻方的算

Hdu 1998 奇数阶魔方

奇数阶魔方 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 4629    Accepted Submission(s): 2622 Problem Description 一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方.n为奇数时我们有1种构造方法,叫做"右上方" ,

奇数阶魔方问题

问题: 一个 n 阶方阵的元素是1,2,...,n^2,它的每行,每列和2条对角线上元素的和相等,这样的方阵叫魔方.n为奇数时我们有1种构造方法,叫做“右上方” ,例如下面给出n=3,5,7时的魔方.38 1 63 5 74 9 2517 24 1 8 1523 5 7 14 164 6 13 20 2210 12 19 21 311 18 25 2 9730 39 48 1 10 19 2838 47 7 9 18 27 2946 6 8 17 26 35 375 14 16 25 34 36

【C++小白成长撸】--(续)双偶数N阶魔阵

原理: 把双偶数N阶魔阵均分为(N/4)^2个4阶魔阵(4*4) 每个魔阵的对角线都标为"-1",其余位置标为"0" 从第一个位置(a[0][0])从左到右,从上到下(例如:a[0][0],a[0][1]--a[0][3],a[1][0])用自然数(从1开始)依次填充,每次填充数加一,遇到-1,跳过,但自然数继续计数 当第三步全部完成后,从最下面一个位置(a[3][3]),从右到左,从下到上,计数从1开始,每次填充数加一,遇到填充了的位置,跳过,但自然数继续计数.

数据结构设计——魔方阵【绝对整理清楚】

魔方阵是一个古老的智力问题,它要求在一个m*m的矩阵中填入1~m*m的数字(m为奇数),使得每一行.每一列.每条对角线的累加和都相等,如下图所示: 程序: #include<stdio.h> #include<stdlib.h> #include<string.h> #define M 100 int main() { int a[M][M]; memset(a,0,sizeof(0)); int x,y,k,m; printf("输入阶数:");

魔方阵算法

输出"魔方阵".所谓魔方阵是指这样的方阵,它的每一行.每一列和对角线之和均相等.例如,三阶魔方阵为      8 1 6      3 5 7      4 9 2要求输出1~n*n的自然数构成的魔方阵. 解:魔方阵中各数的排列规律如下: (1)将1放在第1行的中间一列. (2)从2开始直到n×n止各数依次按下列规则存放:每一个数存放的行比前一个数的行数减1,列数加1(例如上面的三阶魔方阵,5在4的上一行后一列) (3)如果上一数的行数为1,则下一个数的行数为n(指最下一行).例如,1

【C++小白成长撸】--(续)单偶数N阶魔方矩阵

1 /*程序的版权和版本声明部分: 2 **Copyright(c) 2016,电子科技大学本科生 3 **All rights reserved. 4 **文件名:单偶数N阶魔方矩阵 5 **程序作用:单偶数N阶魔方矩阵 6 **作者:Amoshen 7 **完成日期:2016.11.2 8 **版本号:V1.0 9 */ 10 #include<iostream> 11 12 using namespace std; 13 14 #define MAX_SIZE 100 15 16 int

基本算法——for循环的使用之魔方阵实现

魔方阵,是一种每一行.每一列以及对角线的和相等. 魔方阵的一种特性是: 1.第一个元素1的位置始终在第一行正中. 2.下一个元素的位置总是在刚插入位置的右上方. 3.如果右上方的位置超出方阵上边界,则新的位置应取列的最下位置. 4.如果右上方的位置超出方阵右边界,则新的位置应取行的最座位置. 5.若刚插入的元素为n的整数倍,则选刚插入元素位置的下一行同列插入下一元素. 实现代码如下: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #def

魔方游戏实现(一):任意阶魔方的表示

 第一节 魔方的简单表示 对于任意N阶的魔方均有六个面(Surface),每个面有N*N个方块.在面向对象的程序设计里,我们可以把魔方(Cube).魔方的面(Surface)和面的方块(Block)均视作为对象. 魔方的定义:六个面存储在一个数组 ''' <summary> ''' 表示一个指定阶的魔方 ''' </summary> Public Class CubeClass ''' <summary> ''' 魔方阶数 ''' </summary> Pu