蛇形矩阵

题目内容:

从键盘任意输入一个自然数n(n表示矩阵的大小,假设不超过100),请编程输出一个n*n的蛇形矩阵。如果输入的n不是自然数或者输入了不合法的数字,则输出"Input error!"。

函数原型: void ZigzagMatrix(int a[][N], int n);

函数功能:计算n*n的蛇形矩阵

提示:用两个双重循环分别计算n*n矩阵的左上三角和右下三角,设置一个计数器从1开始记录当前要写入矩阵的元素值,每次写完一个计数器加1,在计算左上角和右下角矩阵元素时,分奇数和偶数两种情况考虑待写入的元素在矩阵中的行列下标位置。

程序运行结果示例1:

Input n:

5↙

1 2 6 7 15

3 5 8 14 16

4 9 13 17 22

10 12 18 21 23

11 19 20 24 25

程序运行结果示例2:

Input n:

4↙

1 2 6 7

3 5 8 13

4 9 12 14

10 11 15 16

程序运行结果示例3:

Input n:

-5↙

Input error!

程序运行结果示例4:

Input n:

105↙

Input error!

程序运行结果示例5:

Input n:

w↙

Input error!
在这里插入图片描述
在这里插入图片描述

#include<stdio.h>
#define N 50
void ZigzagMatrix(int a[][N], int n);
int main()
{
  int a[N][N],n,i=0,j=0;
  printf("Input n:\n");
  scanf("%d",&n);
  if(n>=1&&n<=100)
 {
   ZigzagMatrix(a,n);
  for(i=0;i<n;i++)                     //将蛇形矩阵输出
  {
    for(j=0;j<n;j++)
	{
	  printf("%4d",a[i][j]);
	}
	printf("\n");
  }
 }
  else printf("Input error!\n");
  return 0;
}

void ZigzagMatrix(int a[][N], int n)
{
  int i=0,j=0,k=1;
  a[0][0]=1;
  while(i!=n-1||j!=n-1)              //当矩阵到a[n-1][j-1]时停止循环
  {
    if(k==1)
	{
	  a[i][j+1]=a[i][j]+1;
	  j=j+1;
	  if(i==n-1) k=4;
	  else       k=2;
	}
	else if(k==2)
	{ 
	  a[i+1][j-1]=a[i][j]+1;
	  i=i+1;
	  j=j-1;
	  if(j==0&&i!=n-1) k=3;
	  else if(i==n-1)  k=1;
	  else             k=2;
	}
	else if(k==3)
	{
	  a[i+1][j]=a[i][j]+1;
	  i=i+1;
	  if(j==n-1)  k=2;
	  else        k=4;
	}
	else if(k==4)
	{
	  a[i-1][j+1]=a[i][j]+1;
	  i=i-1;
	  j=j+1;
	  if(i==0&&j!=n-1) k=1;
	  else if(j==n-1)  k=3;
	  else             k=4;
	}
  }
}

这种解法应该是蛇形矩阵最容易理解的解法了,k代表每一步的情况,只需考虑清每一种情况即可。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值