C算法题——输出奇数阶魔方阵

C算法题——输出奇数阶魔方阵

魔方阵:每一行、每一列、对角线的数之和均相等的数阵

规则:

  • 1、第一行(及数组第0行)的中间列填1

  • 2、后续数按如下规则放置:
    2.1 行为上一个数的行数减1,列为上一个数的列数加1
    2.2 当上一个数行为1,下一个数行为n
    2.3当上一个数列为n,下一个数列为1,行减1

  • 3、若按2规则放置的位置有数字或者上一个数为第一行第n列,则下一个数放置在上一个数的正下方。

    代码:

i

nt n;
sanf("%d",&n);  //输入阶数
int a[n][n]={0};
int digit=1,row=0,col=0;//初始数字为1,0行0列
while(digit<n*n){
int i=row,j=col; //赋值上一个数的行列值,以判断操作
if(i==0)  //若上一个数位于第一行,则当前行数改为最后一行
	i=n-1;
else   //负责行数减一
	i=i-1; 
j=(j+1)%n; //列数先做加一操作
if(a[i][j]!=0||(row==0&&col=n-1)){ 
 //若上述位置已经有数或上一个数位于第一行第n列
	i=row+1;
	j=col;
}
//记录当前值的行列数为上一个值得行列值
row=i;
col=j;
++count;
}
/*算法结束,打印数组即可*/
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值