蛇形矩阵(C语言)

目录

一、题目

二、分析

三、完整代码


一、题目

题目描述 

给你一个整数n,输出n∗n的蛇形矩阵。

输入描述:
输入一行,包含一个整数n
输出描述:
输出n行,每行包含n个正整数,通过空格分隔。

1<=n<=1000

示例1

输入
4
输出
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16

二、分析

1.定义一个大于n*n的二维数组a 

2.给a[1][1]赋值为1

 3.按照红线顺序对数组赋值

 

 进入循环,对每一条红线(先向左下方向,再向下,再向右上方向)依次赋值

定义f为一个数,用于赋值给数组,每次使用后加1。

  ①

for(j=0;;j++) //向左下
        {
            if(1+j<=n&&i-j<=n)
            {
                a[1+j][i-j]=f;
                f++;
            }
            
            if(i-j==1)  break;//如果循环中赋值到了第一列,则停止循环,退出循环
        }

其中的 if(1+j<=n&&i-j<=n)

需要这行代码的原因是由于定义的二维数组是大于n*n的,所以每次赋值需要判断是不是在n*n的范围内,若不存在则不赋值,f不变。 如图假设n=4时,到最左下角时,超出n*n的范围,则对最左下角不赋值,并且f不变。

以下相同。

 

 

if(j+2<=n)//判断a[j+2][1]是不是在n*n的范围内
    {
        a[1+j+1][1]=f;
        f++;
    }

 ③

 

for(k=1;;k++) //右上
        {
            if(j+2-k<=n&&1+k<=n)
            {
                 a[j+2-k][1+k]=f;f++;
            }
           
            if(j+2-k==1) break;//如果循环中赋值到了第一行,则停止循环,退出循环
        }

最后进入循环,给下一条红线进行依次赋值。

三、完整代码

#include<stdio.h>
int main()
{
    int n;
    scanf("%d",&n);
    int i,j,k;
    int a[1100][1100]={0};
    int f=1;
    a[1][1]=f;f++;
    for(i=2;i<=n*2;i+=2)
    {
        for(j=0;;j++) //向左下
        {
            if(1+j<=n&&i-j<=n)
            {
                a[1+j][i-j]=f;
                f++;
            }
            
            if(i-j==1)  break;
        }
        
        if(j+2<=n)
        {a[1+j+1][1]=f;f++;}// 向下一格
        
        for(k=1;;k++) //向右上
        {
            if(j+2-k<=n&&1+k<=n)
            {
                 a[j+2-k][1+k]=f;f++;
            }
           
            if(j+2-k==1) break;
        }
    }
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=n;j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值