幻方 C语言

编写一个求阶数n(n>2)为奇数的“魔方矩阵”的函数。

魔方矩阵是指这样的方阵:它具有相同的行数n和列数n,并且每行、每列和对角线之和均相等,魔方矩阵中的每个元素不能相同。

要求输入n,输出对应的魔方矩阵。

我设计的幻方阶数的范围是1到100之间的奇数。奇数阶幻方的构造有很多种,这里只提供了一种比较常见简单的构造方法——楼梯法(罗伯法),因其通用性较强,可以设计出更高阶的奇数阶幻方。

#include<stdio.h>
int main()
{
    int a[100][100]={0};//定义二维数组 
    int i,j,n,k;
        i=1; 
        printf("请输入阶数为1~100之间的奇数:\n"); 
        scanf("%d",&n);//输入魔方阵的维度n
        j=(n+1)/2;
        a[i][j]=1; //确定第一排最中间的数为1
        for(k=2;k<=n*n;k++)//已经确定1的位置了,再循环确定2~n*n的位置
        {
            i=i-1; //挪位,竖排往上挪一位。
            j=j+1; //挪位,横排往右挪一位。
            if((i<=0)&&(j<=n)) //如果竖排挪到顶,同时横排还没有超过最右
// 竖排就到从最下再继续。
            {
              i=n; 
			} 
            if((i<=0)&&(j>n)) //如果竖排挪到顶,同时横排超过最右
//竖排往下挪两位,横排往左移一位。
            { 
              i=i+2; 
              j=j-1; 
            } 
            if(j>n) //如果只有横排超过最右,横排挪到左边第二行。
            { 
                j=1; 
            } 
            if(a[i][j]==0)
            {
              a[i][j]=k; //如果这个位置还没有赋值,那么赋值为k。
			} 
            else  //已经赋值过了。那么竖排往下挪两位,横排往左移一位,再赋值为k
            { 
                i=i+2; 
                j=j-1; 
                a[i][j]=k;
            } 
        } 
        for(i=1;i<=n;i++) //循环输出位置。
        {
          for(j=1;j<=n;j++)
          {
            printf("%3d ",a[i][j]);
		  } 
            printf("\n");//换行 
        }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孟阳小酒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值