本文主要是介绍C语言 七阶魔方阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述:
用数组实现7阶魔方矩阵。所谓的N阶魔方矩阵是指把1~N*N的自然数按一定方法排列成N*N的矩阵,使得:任意行、任意列以及两个对角线上的数之和都相等(N为奇数)。例如下面的5阶魔方矩阵,任意行、任意列以及两个对角线上的数之和都为65。 5阶魔方如下: 17 24 1 8 15 23 5 7 14 16 4 6 13 20 22 10 12 19 21 3 11 18 25 2 9 奇数阶魔方矩阵的算法如下: 第1步:将1放入第一行的正中处。 第2步:按如下的方法依次将第i个数(i从2到N*N)放到合适的位置上。 如果第i-1个数的右上位置没有放数,则将第i个数放到前一个数的右上位置。 如果第i-1个数的右上位置已经有数,则将第i个数放到第i-1个数的下一行,列数相同的位置。 **输出格式要求:"\n%d阶魔方矩阵如下:\n" 输出7个"===="后换行 "%4d" 输出7个"===="后换行
习题解答:
#include<stdio.h>
#include<stdlib.h>
#define N 7
int main(){int a[N][N] = {0};a[0][N/2] = 1;int cnt = 1;int temp_i,temp_j;temp_i = 0;temp_j = N/2;while(cnt<N*N){cnt++;if(a[((temp_i-1)+N)%N][((temp_j+1)+N)%N] == 0){a[((temp_i-1)+N)%N][((temp_j+1)+N)%N] = cnt;temp_i = ((temp_i-1)+N)%N;temp_j = ((temp_j+1)+N)%N;}else{a[((temp_i+1)+N)%N][temp_j] = cnt;temp_i = ((temp_i+1)+N)%N;temp_j = temp_j;}//printf("%d ",cnt);}printf("\n%d阶魔方矩阵如下:\n",N);printf("================================\n");for(int i = 0;i<N;i++){for(int j = 0;j<N;j++){printf("%4d",a[i][j]);}printf("\n");}printf("================================");
}
需要注意的两个点是:
1)避免数组越界的方法是:对要生成的位置i,j取余N。
2)避免负数的方法是:可以用abs绝对值函数处理后再取余,或取余之前+N;
附上:
C语言 指针学习笔记_唐楚江之歌的博客-CSDN博客https://blog.csdn.net/tangchujiang/article/details/124143283?spm=1001.2014.3001.5502
这篇关于C语言 七阶魔方阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!