您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页C语言实现洛书传说代码:100以内奇数幻方的生成(九宫图的生成)

C语言实现洛书传说代码:100以内奇数幻方的生成(九宫图的生成)

来源:伴沃教育

今天看到一道有意思的C语言题目,与中国传统文化结合起来了

下面是题目展示:

在中国古典文献 中记载了洛书的传说:公元前 23世纪大禹治水之时,一只巨大的神龟出现于黄河支流洛水中,龟甲上有9种花点的图案,分别代表这9个数,而3行、3列以及两对角线上各自的数之和均为15,世人称之为洛书。中国汉朝的数术记遗中,称之为九宫算,又叫九宫图.宋数学家杨辉著《续古摘奇算法 》把类似于九宫图的图形命 名为纵横图,书中列举3、4、5、6、7、8、9、10阶幻方。其中所述三阶幻方构造法:“九子斜排,上下对易,左右相更,四维挺出,戴九履一,左三右七,二四为肩,六八为足”,比法国数学家Claude Gaspar Bachet提出的方法早三百余年。

试编一程序打印九宫图

要求:

输入奇数矩阵大小,比如3,5,9,... ,(<100)

输出矩阵

PS:这里我默认输出格式是"%5d"

直观表述这个表格怎么画

下面是代码展示:

#include<stdio.h>
#define LEN 99
void CMS(int mag[LEN][LEN], int odd);
void printMag(int mag[LEN][LEN], int odd);
int main()
{
    int odd;
    int mag[LEN][LEN] = {0};//将数组都初始化为0,不仅是好习惯,而且在之后有用处
    scanf("%d",&odd);       //输入一个奇数,作为矩阵的阶数
    CMS(mag,odd);
    printMag(mag,odd);
    return 0;
}
//函数功能:生成“九宫图”
//传递参数:二维数组,矩阵阶数
void CMS(int mag[LEN][LEN], int odd)
{
    int i, row = odd-1, col = odd / 2, mul = odd * odd;
    for(i = 1; i <= mul;)    //1到odd*odd遍历
    {
        //判断该位置是否被占
        
        
        if(mag[row][col] != 0)
        {   
            //如果被占了,则向上两格,向左一格,回到原来数字的正上方
            row = row - 2;
            --col;
            //如果向上顶到头了,就放最后一排
            if(row >= odd)
                row = row - odd;
            continue;   //重新开始循环
        }
        mag[row][col] = i;  //赋值
        //计算下一个位置的row、col
        ++row;
        ++col;
        //考虑在右下角的情况
        if(row >= odd && col >= odd)
        {
            row = row -2;
            --col;
        }
        //不在右下角
        else
        {
            if(row >= odd)
                row = row - odd;
            if(col >= odd)
                col = col - odd;
        }
        ++i;        //i自增
    }
}
//打印函数
void printMag(int mag[LEN][LEN], int odd)
{
    int i,j;
    for(i = 0; i < odd; i++)
    {
        for(j = 0; j < odd; j++)
            {
                printf("%5d",mag[i][j]);
            }
        printf("\n");
    }
}

效果就是这样的

这里定义数组的时候,是定义了一个99*99的数组,目的就是为了简便,省去了定义动态数组的麻烦。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务