Zigzag和蛇形矩阵
在做二维数组题时遇到了两道有相近的题目,题目如下(可以先看蛇形矩阵方便理解):
Zigzag输入n,(0 < n <= 20),建立n*n二维数组,按照下图规则(呈之字形,
即ZIGZAG排列)把1~n*n个数放在n*n二维数组中,然后按行优先顺序输出。1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
先不说zigzag排列的作用,其实这就是以一种特殊的方式给矩阵赋值,通过观察数字规律可以发现:
1、数字不断以左下或者右上方向有规律递增
2、左下或者右上方向是交替进行的
知道这些基本上就能根据规律写出代码:我根据二维矩阵的坐标性质分为右半上角和左下半角赋值
看这坐标,(0,0)虽然只有一个,但我依然可以认为这是右上方向的,下一次则是左下方向,再下一次又是右上,所以可以定一个标志变量用于确定方向,坐标值在一个方向上也是递增或者递减,剩下的就是用双循环表达这个规律了,下半三角类似,具体看代码即可
#include <stdio.h>int main(int argc,const char*argv[])
{int i,j,cnt=0,zig[20][20],N,flag=0;//flag=0默认右上方向开始while(scanf("%d",&N)&&N!=0){cnt=1;flag=0;//上半三角for(i=0;i<N;i++){for(j=0;j<=i;j++){if(flag==1)zig[j][i-j]=cnt; //往下,行递增,列递减elsezig[i-j][j]=cnt; //往上,行递减,列递增cnt++;}if(flag==1) //下一次改变方向flag=0;elseflag=1;}//下半三角for(i=N-1;i>0;i--){for(j=0;j<i;j++){if(flag==1)zig[N-i+j][N-j-1]=cnt; //往下,行递增,列递减elsezig[N-j-1][N-i+j]=cnt; //往上,行递减,列递增cnt++;}if(flag==1) //下一次改变方向flag=0;elseflag=1;}for(i=0;i<N;i++)//遍历输出{for(j=0;j<N;j++){if(j<N-1)printf("%-3d ",zig[i][j]);elseprintf("%-3d",zig[i][j]);}printf("\n");}printf("\n");}return 0;}
随便找个数试试:
================================================
至于蛇形矩阵,明白了上面的原理就更加简单啦
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
样例输入
5
样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
可以看出每一行开始数字往右上递增,坐标规律为行递减,列递增
#include <stdio.h>int main(int argc,const char*argv[])
{int sak[100][100];int i,j,cnt,N;while(scanf("%d",&N)!=EOF){ cnt=1;for(i=0;i<N;i++)for(j=0;j<=i;j++){sak[i-j][j]=cnt; //从(i,0)开始,行递减列递增 cnt++;}for(i=0;i<N;i++) //输出 {for(j=0;j<N-i;j++){if(j!=N-i-1)printf("%d ",sak[i][j]);elseprintf("%d",sak[i][j]);}printf("\n");}} return 0;}
Zigzag和蛇形矩阵相关推荐
- Acwing756. 蛇形矩阵:模拟
文章目录 题目分析 题目链接 题目分析 所谓蛇形走位就是 螺旋形走位. 比如 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 模拟:需要知道4个偏移量,同时需要注意是顺时 ...
- wikioi 1160 蛇形矩阵
/*======================================================================== 1160 蛇形矩阵 题目描述 Descriptio ...
- C语言实现上三角蛇形矩阵不用数组,C/C++编程笔记:C++ 嵌套循环,含循环打印及蛇形矩阵实例...
也称为多循环,在一个循环中嵌套使用一个或多个循环. 嵌套循环的基本结构就是在一个循环中,循环体包含了另一个循环的情况.下面我用几个嵌套循环的例子来深入理解嵌套循环. 循环图案打印 分别打印下面三种图案 ...
- 方欣科技算法面试:蛇形矩阵2
1 题目描述 /** * 蛇形矩阵2 * * 输入4 * * 输出 * 1 12 11 10 * 2 13 16 9 * 3 14 15 8 * 4 5 6 7 * ...
- 方欣科技算法题面试:蛇形矩阵
1题目描述 样例输入 4 样例输出 1 3 6 102 5 9 4 8 7 2 java代码 //输入 //输入正整数N(N不大于100) // //输出 //输出一个N行的蛇形矩阵. // //样例 ...
- 用python编写杨辉三角金字塔_用python实现三道简单算法题:杨辉三角,蛇形矩阵,金字塔...
分享几道简单的python打印输出的问题,本质上都是可以将其分解成一个大循环之中有几个小循环. 1.杨辉三角 主要特点: 每个数等于它上方两数之和. 每行数字左右对称,由1开始逐渐变大. 每行端点与结 ...
- C语言实现上三角蛇形矩阵不用数组,蛇形矩阵c语言实现
[问题描述]蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形.如: 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 本题要求根据输入的行数要求,输出对应的一个蛇形上三角矩 ...
- 牛客网--蛇形矩阵(Java)
题目描述 题目说明 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. 样例输入 5 样例输出 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 接口说明 原型 void ...
- zigzag模式提取矩阵元素
zigzag模式提取矩阵元素 zouxy09@qq.com http://blog.csdn.net/zouxy09 这节博文只是为了上传个代码而已.希望对需要的人有用.zig-zag模式如下图所示. ...
最新文章
- 虚拟机删除后服务器内存,卸载虚拟机后仍占内存
- 从字母数字字符串中提取数字
- 宣告推出.NET Core 3.0 Preview 7
- 面试官:你说对MySQL事务很熟?那我问你10个问题
- iOS初级开发学习笔记:APP生命周期的学习总结
- Openssl证书管理
- 向eclipse中导入myeclipse项目
- HashMap--并发下死循环(HashMap不能在多线程下使用)
- html中心点缩放,html canvas 让物体随物体中心缩放
- 详解Java的交互式编程环境:jshell
- 3 个主流 Java 微服务框架,各有特色
- IntelliJ IDEA如何自动生成serialVersionUID?
- 机顶盒播放流媒体服务器的文件,IPTV机顶盒的流媒体播放器设计
- 手把手教你写 Word 版本PRD
- uniApp 生命周期【应用生命周期 和 页面生命周期】
- Keychron K7 Pro 轻薄矮轴机械键盘开箱体验
- Java解析OpenDrive,OpenDrive格式解析
- 关于福昕阅读器启动速度慢的问题
- NS3 Tutorial 中文版:第四章 概念概述
- 窗口置顶工具v2.4.0