当前位置: 首页 > news >正文

蛇形矩阵(简单明了的方法)

T112524 【数组2】蛇形矩阵

题目来源

AC代码

#include<stdio.h>

int main()
{
    int arr[111][111];
    int n = 0;
    scanf("%d",&n);
    int temp = 0;
    int sum = 1;
    while(temp<=(2*n-2))
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<n;j++)
            {
                if((i+j) == temp)
                {
                    if(temp%2 == 0){
                        arr[j][i] = sum++;       
                    }else{
                        arr[i][j] = sum++;
                    }
                }
            }
        }
        temp++;
    }
    
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<n;j++)
        {
            printf("%d ",arr[i][j]);
        }
        printf("\n");
    }
    return 0;
}

算法

**根据样例来分析**
输入:
4
输出:
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16  

由7 8 9 10这条斜对角线可以得知:i+j=(n-1)
下面我就称这条对角线为中心对角线


在中心对角线前面的对角线分别为:
i+j=(n-2)、i+j=(n-3)…
在中心对角线后面的对角线分别为:
i+j=n、i+j=(n+1)…


设定一个temp变量,并且temp = i+j
让temp从0开始加到2*n-2


为什么是2*n-2呢?

因为数组的下标是从0开始的,所以说i+j最小为0,最大为2*n-2


因为最后要打印数字,所以说定义一个sum变量从1开始,不断累加,赋值给数组


因为以中心对角线为基准的左右两边的对角线:分为从上到下和从下到上两种,其中,从下到上的对应的(i+j)是偶数


过程推导:
在这里插入图片描述

相关文章:

  • linux环境安装mysql5.7版本
  • Vue过滤器
  • linux系统中利用QT实现串口通信的方法
  • ESP32蓝牙+EC11旋转编码器实现对电脑音量控制
  • 57 mac 中 SIGINFO 信号, jdk8 支持, 但是 jdk9 不支持?
  • 【Linux】在Linux上写一个进度条小程序
  • 【寒假每日一题】DAY.6 有序序列的合并
  • 2022年度总结,迎接2023
  • (二十)正则表达式
  • 多节点Linux环境打造
  • Spring Boot配置文件数据也可以轻松加密?
  • 第十三届蓝桥杯C++B组省赛 J 题——砍竹子(AC)
  • 拓扑排序 (算法思想+图解+模板+练习题)
  • SAP FICO常用报表和事务码大全
  • 2. PyTorch简介:使用PyTorch训练第一个神经网络
  • LeetCode 295. 数据流的中位数(C++)*
  • MySQL表的增删查改
  • 完全二叉树与堆(包含STL堆的用法)
  • 用HTML写一个2023跨年动画代码(烟花+自定义文字+背景音乐+雪花+倒计时)
  • Electron打包图标不显示解决方案
  • 解放日报:抢占科技制高点,赋能新质生产力
  • 车展之战:国产狂飙、外资反扑、智驾变辅助
  • 国台办:民进党当局所谓“对等尊严”,就是企图改变两岸同属一中
  • 刘国中:毫不松懈巩固拓展脱贫攻坚成果,全力以赴抓好农业防灾减灾工作
  • 圆桌|如何应对特朗普政府的关税霸凌?一种联合国视角的思考
  • 排除燃气爆炸、人为放火可能,辽宁辽阳火灾事故起火原因正在调查