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博客icon-default.png?t=M3C8https://blog.csdn.net/tangchujiang/article/details/124143283?spm=1001.2014.3001.5502

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值