活动地址:CSDN21天学习挑战赛
学习的最大理由是想摆脱平庸,早一天就多一份人生的精彩;迟一天就多一天平庸的困扰。各位小伙伴,如果您:
想系统/深入学习某技术知识点…
一个人摸索学习很难坚持,想组团高效学习…
想写博客但无从下手,急需写作干货注入能量…
热爱写作,愿意让自己成为更好的人…
…
欢迎参与CSDN学习挑战赛,成为更好的自己,请参考活动中各位优质专栏博主的免费高质量专栏资源(这部分优质资源是活动限时免费开放喔~),按照自身的学习领域和学习进度学习并记录自己的学习过程。您可以从以下3个方面任选其一着手(不强制),或者按照自己的理解发布专栏学习作品,参考如下:
**
目录
今天给大家安排个高难度——蛇形数组。
题目来源:
给你一个整数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;
- }
今天和大家简单学习了一下蛇形数组,比较难,大家仔细琢磨会有所帮助的,希望可以共同进步哈~