C语言——打印魔方阵(每一行,每一列,对角线之和相等)

《一》魔方阵说明:

魔方阵是一个N*N的矩阵;

该矩阵每一行,每一列,对角线之和都相等;

《二》魔方阵示例:

三阶魔方阵:

8   1   6

3   5   7

4   9   2

每一行之和:8+1+6=15;

3+5+7=15;

4+9+2=15;

每一列之和:8+3+4=15;

1+5+9=15;

6+7+2=15;

对角线之和:8+5+2=15;

6+5+4=15;

《三》魔方阵计算规律(行,列以1开始):

1.将“1”放在第一行,中间一列;

2.从2开始至N*N各数按如下规律:

每一个数存放的行比上一个数的行减1;

每一个数存放的列比上一个数的列加1;

3.当一个数行为1,下一个数行为N;

4.当一个数列数为N,下一个数列数为1,行数减1;

5.若按上述规则确定的位置有数字,或上一个数位第1行第N列,

下一个数字位置为上一个数的正下方(即行数减1,列数不变);

《四》源代码:

 1 #define _CRT_SECURE_NO_WARNINGS
 2 #include <stdio.h>
 3 #include <stdlib.h>
 4 #include <math.h>
 5
 6 #define N 5
 7
 8 int main()
 9 {
10     int a[N][N] = {0};
11     int count = 1;
12     int row = 0, cul = N / 2;
13     while (count <= N*N)
14     {
15         a[row][cul] = count;
16         int i = row;
17         int j = cul;
18         if (i == 0)
19         {
20             i = N - 1;
21         }
22         else
23         {
24             i = i - 1;
25         }
26         j = (j + 1) % N;
27         if (a[i][j]!=0||(row==0&&cul==N-1))
28         {
29             i = row + 1;
30             j = cul;
31         }
32         row = i;
33         cul = j;
34         count++;
35     }
36
37     for (int i = 0; i < N; i++)
38     {
39         for (int j = 0; j < N; j++)
40         {
41             printf("%3d",a[i][j]);
42         }
43         printf("\n");
44     }
45
46     system("pause");
47 }

时间: 2024-10-28 20:32:26

C语言——打印魔方阵(每一行,每一列,对角线之和相等)的相关文章

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

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

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

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

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

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

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

魔方阵是一个古老的智力问题,它要求在一个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语言打印记事本内搜索字符串所在行信息

本程序采用C语言编写,使用方法: 1.双击“甲骨文字符串查询作品.exe”运行程序; 2.运行前请确保此可执行程序目录下有1.txt文件. 3.根据提示输入一个字符串,程序将显示存在所搜索字符串的所有行! 程序如果问题,请联系[email protected]! 2014-7-31日安阳师范学院机房完成. 程序截图: 源码如下: #include <stdio.h> #include<string.h> #include<stdlib.h> #include<co

&#8203;用c语言打印自定义的乘法口诀表。例如:输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表。

用c语言打印自定义的乘法口诀表.例如:输入9,输出9*9口诀表,输入12,输出12*12的乘法口诀表. #include <stdio.h> int main () { int n; int i, j; printf ("请输入要打印多大的乘法口诀表"); scanf ("%d",&n); for (j=1; j<=n; j++) { for(i=1; i<=j; i++) { printf ("%d*%d=%2d &quo

C语言打印100以内的质数

C语言打印100以内的质数 #include <stdio.h> int main() { int number; int divisor; for( number = 3; number <= 100; number += 2 ) { for( divisor = 3; divisor <= number; divisor += 2 ) { if( number % divisor == 0 ) break; } if( divisor == number ) printf(&q

C语言打印100到200之间的素数

用C语言打印素数,我们首先要了素数的相关定义:只有1和它本身两个因数的自然数,也就是说除了1和它本身外,不能被其他自然数整除的数就称为素数. 例如:101只能被1 和101 整除:103只能被1 和103 整除,所以他两都是素数 思路: 要判断一个数是否为素数可以验证从2开始到它本身的数里是否有可以被他取余数为0 的数字,如果有则证明它不是素数.反之则输出素数. 1 # include<stdio.h> 2 int main() 3 { 4 int i = 0; 5 int count = 0