【榆钱】蛇形矩阵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.循环的时候是从整个矩阵的外边往里边填,先往左,再往上,再往右,再往下。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值