前言
今天给大家安排个高难度——蛇形数组。
一、蛇形数组
题目来源:
描述
给你一个整数n,输出n∗n的蛇形矩阵。
输入描述:
输入一行,包含一个整数n
输出描述:
输出n行,每行包含n个正整数,通过空格分隔。
1<=n<=1000
不知道有没有伙伴和我一样,看到这东西人都傻了,有规律,但不多。
二、分析问题
我们不难发现,它是按照斜线,蛇形逐渐递增的,但是要找出它递增的条件还是有点难,我们先慢慢分析,我们先分析斜线,可以发现 行=列,数字大小一样,然后蛇形走位,是增减的问题了。
附上一张大佬分析图:
三、代码如下
#include <iostream> using namespace std; void snack(int n) { int num = 1; int k = 0; int a[n][n]; while(k < n) { for(int i = 0; i <= k; ++i) { if (k % 2 == 0) { a[k-i][i] = num++; }else { a[i][k-i] = num++; } } ++k; } int flag = 1; while(k < 2*n - 1) { for(int i = n-1;i>=flag;--i) { if(k%2 == 0) { a[k-i][i] = num++; } else { a[i][k-i] = num++; } } flag++; ++k; } for(int i = 0; i < n; ++i) { for(int j = 0; j< n; ++j) { cout<<a[i][j]<<" "; } cout<<endl; } } int main() { int n; cin >>n; snack(n); return 0; }
总结
今天和大家简单学习了一下蛇形数组,比较难,大家仔细琢磨会有所帮助的,希望可以共同进步哈~