#c N宫格-横竖斜的和相等

#c N宫格-横竖斜的和相等

要求

一个n阶n×n的矩阵,由数字1,2,⋯,n×n 构成,且满足每一行、每一列、两条对角线的数的和都相等。例如以下是一个3阶的。
816
357
492
它满足:
每一行的和都是15:8+1+6=15、3+5+7=15、4+9+2=15
每一列的和都是15: 8+3+4=15、1+5+9=15、6+7+2=15
两条对角线的和也是15:8+5+2=15、4+9+2=15。
话不多说直接上代码!!!

#include<stdio.h>
int main()
{
	int n;
	int k[40][40] = { 0 }; // 幻方的矩阵
	scanf("%d", &n);
	int b = n / 2 + 1, a = 1, c, d;
	for (int i = 1; i <= n * n; i++) {
		if (i == 1) {
			k[a][b] = 1;
			continue;
		}
		c = a, d = b,a--, b++;
		if (a < 1)a = n;
		if (b > n)b = 1;
		if (k[a][b] == 0)k[a][b] = i;
		else {
			a = c, b = d;
			a++;
			k[a][b] = i;
		}
	}
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			printf("%d", k[i][j]);
			printf("%c", j == n ? '\n' : ' ');
		}
	}
	return 0;
}

分析思路

1.首行中间位置填入1。
2.设前一次在x行y列处填入a。如果x-1行、y+1列(即右上一格)还没填入数字,则在该位置填入a+1。否则,在x+1行、y列(即下方一格)位置填入a+1。注意,如果x-1超出上边界,则变成最后一行,即实现循环减1。对y+1操作同理。
3.重复步骤2,直到填入n×n。

流程图如下

在这里插入图片描述
ps:小白一只如有不对请指正!谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值