【榆钱】蛇形矩阵C语言题解

题目描述 Description

小明玩一个数字游戏,取个n行n列数字矩阵(其中n为不超过100的奇数),数字的填补方法为:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字,请输出该n行n列正方形矩阵以及其的对角线数字之和.

样例输入

3

样例输出

5 4 3
6 1 2
7 8 9
25

代码段:

#include<stdio.h>
int main()
{  
	int n;
	scanf("%d", &n);
	int i=n, j=n, x, k= n*n, sum=0, a[1024][1024]; 
	for (x=1; n-x > 0; i--,j--,x++)
	{
	  for (; j >= x; j--)//先往左,
	   a[i][j] = k--;
	  for (j++,i--; i >= x; i--)//再往上,
	   a[i][j] = k--;
	  for (i++,j++; j <= n + 1 - x; j++)//再往右,
	   a[i][j] = k--;
	  for (j--,i++; i <= n - x; i++)//再往下。 
	   a[i][j] = k--;
	}
	//用来进行输出 
	for (i = 1; i <= n; i++)
	{
	  for (j = 1; j <= n; j++)
	  	{
			printf("%d ", a[i][j]);
		    if (i + j == n + 1 || i == j)
			    sum += a[i][j];
		}
		printf("\n");
	 }
	printf("%d", sum);
	return 0;
}

思路理解:

1.整体思路是先找出最后一个数字的值,然后从最外层往最里层写

 2.定义输入n, 矩阵a ,x和i、j用来控制往矩阵里写数字, sum用来计算对角线数字的和 ,k是最后一个数字的值的大小(比如,三行三列,则矩阵存的最后一个数字为3x3=9. )

 3.循环的时候是从整个矩阵的外边往里边填,先往左,再往上,再往右,再往下。 

参与评论 您还未登录,请先 登录 后发表或查看评论

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页

打赏作者

哈哈哈哈哈滚

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

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

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

打赏作者

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

抵扣说明:

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

余额充值