【算法设计与分析】—— 魔方阵 (莫慌莫慌)

算法题目

在这里插入图片描述

算法分析

  • 最重要的是要知道想要实现输入任意的奇数,输出相应阶数的魔方阵,我们应该要怎么样做,即找出怎么样的规律,使我们更加容易的实现编程,所以我们需要做充分的数学准备工作~
    在这里插入图片描述
  • 魔方阵和螺旋阵的输出是一样的,即在控制位数上,我们要找到最大位数(n*n),并求出相应的位数,在输出时使用%*d格式输出,控制输出位数是相当重要的一步工作~

在这里插入图片描述
在这里插入图片描述

代码实现

#include<stdio.h>
//magic square array
//6 1 8
//7 5 3
//2 9 4
int s[100][100];    //大数组放在外面哦~
int main()
{
    int n;      //表示奇数阶魔方阵
    int k=1;    //魔方阵起始数据
    int i,j;    //i表示行下标 j表示列下标
    int i1,j1;  //临时存储变量i,j  若已被占用 则重新赋值
    int m;      //m=n*n
    int count=0;//记录m的位数 控制输出位数

    printf("请输入你想要输出的奇数魔方阵阶数(请输入奇数):\n");
    scanf("%d",&n);

    m=n*n;

    while(m!=0) //求m的位数
    {
        count++;
        m=m/10;
    }

    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            s[i][j]=0;         //标识变量 表明还没有被占用
        }
    }

    i=1;
    j=(n+1)/2;

    while(k<=n*n)
    {
        s[i][j]=k;
        k++;

        i1=i;
        j1=j;

        i=i-1;
        j=j-1;

        if(i==0) i=n;
        if(j==0) j=n;

        if(s[i][j]!=0)
        {
            i=i1+1;
            j=j1;
        }
    }


    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
        {
            printf("%*d ",count,s[i][j]);
        }
        printf("\n");
    }



    return 0;
}

结果示例

  • 示例一
    在这里插入图片描述
  • 示例二
    在这里插入图片描述
  • 示例三
    在这里插入图片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章