「牛客网C」初学者入门训练BC134,​BC136​

简介: 题目:BC134 蛇形矩阵难度:中等描述:给你一个整数n,输出n∗n的蛇形矩阵。输入描述:输入一行,包含一个整数n输出描述:输出n行,每行包含n个正整数,通过空格分隔。1<=n<=1000示例1

🚀🚀🚀大家觉不错的话,就恳求大家点点关注,点点小爱心,指点指点🚀🚀🚀

 

题目:BC134 蛇形矩阵

难度:中等

描述:

给你一个整数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

解题思路:所以,我用pos变量表示方向,其中1代表右上与右,-1代表左下与下.

运动情况分为6种:

碰到上边界(即i等于1且j小于n): 列增加1,行不变--------往右移动一格

碰到左边界(即j等于1 且 i小于n): 行增加1,列不变--------往下移动一格

碰到右边界(即j等于n): 行增加1,列不变--------往下移动一格

碰到下边界(即i等于n): 列增加1,行不变--------往右移动一格

以上四种是在边界上面移动.只有向右 和 向下

除去上面四种的边界情况,就是在边界中间的左下移动

除去上面四种的边界情况,就是在边界中间的右上移动

最后两种是在边界内移动 只有右上和左下

1. #include<stdio.h>
2. int main()
3. {
4. int n=0;
5. printf("请输入矩阵的阶数\n");
6. scanf("%d",&n);
7. int arr[n+2][n+2];//虽然定义了一个,n+2阶的矩阵,但是我们只需要n阶矩阵
8. for(int i=0;i<n+2;i++)
9.     {
10. for(int j=0;j<n+2;j++)
11.         {
12.             arr[i][j]=0;
13.         }
14.     }
15.     arr[1][1]=1;
16. int k=0;
17. int i=1,j=1,pos=1;
18. for(k=2;k<=n*n;k++)
19.     {
20. if(i==1&&j<n&&pos==1)//上边界,行不变,列增加一
21.         {
22.             arr[i][++j]=k;
23.             pos=-1;
24.         }
25. else if(j==1&&i<n&&pos==-1)//左边界,列不变,行增加一
26.         {
27.             arr[++i][j]=k;
28.             pos=1;
29.         }
30. else if(j==n&&pos==1)//右边界,行加一,列不变
31.         {
32.             arr[++i][j]=k;
33.             pos=-1;
34.         }
35. else if(i==n&&pos==-1)//下边界,行不变,列加一
36.         {
37.             arr[i][++j]=k;
38.             pos=1;
39.         }
40. else if(pos==1)//右上
41.         {
42.             arr[--i][++j]=k;
43.         }
44. else if(pos==-1)//左下
45.         {
46.             arr[++i][--j]=k;
47.         }
48.     }
49. for(i=1;i<=n;i++)
50.     {
51. for(j=1;j<=n;j++)
52.         {
53. printf("%-4d",arr[i][j]);
54.         }
55. printf("\n");
56.     }
57. }

BC136 KiKi判断上三角矩阵

难度:中等

描述:

KiKi想知道一个n阶方矩是否为上三角矩阵,请帮他编程判定。上三角矩阵即主对角线以下的元素都为0的矩阵,主对角线为从矩阵的左上角至右下角的连线。

输入描述:

第一行包含一个整数n,表示一个方阵包含n行n列,用空格分隔。 (2≤n≤10)

从2到n+1行,每行输入n个整数(范围-231~231-1),用空格分隔,共输入n*n个数。

输出描述:

一行,如果输入方阵是上三角矩阵输出"YES"并换行,否则输出"NO"并换行。

示例1

输入:

3

1 2 3

0 4 5

0 0 6

输出:

YES

示例2

输入:

4

1 2 3 4

5 6 7 8

9 0 11 12

13 0 0 16

输出:

NO

解题思路:我们可以判断它主对角线下面的元素是否为0,第一行,判断0个元素,第二行判断两个元素,第三行判断三个元素...第n行判断n-1个元素。

1. #include<stdio.h>
2. int main()
3. {
4. int n=0;
5. printf("亲输入输入方阵边长\n");
6. scanf("%d",&n);
7. int arr[n][n];
8. int i=0,j=0;
9. int count=0;
10. printf("请输入矩阵\n");
11. for( i=0;i<n;i++)
12.     {
13. for( j=0;j<n;j++)
14.         {
15. scanf("%d",&arr[i][j]);
16.         }
17.     }
18. for( i=1;i<n;i++)
19.     {
20. for( j=0;j<i;j++)
21.         {
22. if(arr[i][j]!=0)
23.             {
24. printf("NO\n");
25.                 count=1;
26. goto agin;
27.             }
28.         }
29.     }
30.     agin:
31. if(count==0)
32.     {
33. printf("YES\n");
34.     }
35. return 0;
36. }

这里用到了,goto语句,如果判断它有一个元素不是0,就直接跳出两重循环,这样减少了,循环次数。

🌸🌸🌸如果大家还有不懂或者建议都可以发在评论区,我们共同探讨,共同学习,共同进步。谢谢大家! 🌸🌸🌸



相关文章
|
移动开发 前端开发 测试技术
关于前端AB实验,我是这么思考的
背景 大家好, 我是Fly哥, 这次分享的内容主要是关于ABtest ,我们是做用户增长的,说白了就是对应下面几个关键词。拉新、激活、留存,留存的话 又分为 次日留存、 3日留存,这些都是我们的指标, 但是产品设计一个需求的时候, 可能会有实验的性质,不确定哪一组实验,对于指标的反馈是正向的,或者是那一组实验的效果更加明显。 这时候产品就会去创建AB实验,然后拿线上的一部分流量,去做实验, 分析数据, 得出实验结论,然后看是否满足预期, 如果不满足 就暂停实验, 或者进行全量实验。 大家可以看下下面这张流程图: 图片 然后对于我们前端而言,我们关心的点只有两个 第一个就是接入ABtest,
关于前端AB实验,我是这么思考的
|
2月前
|
Java
一道在知乎很火的 Java 题——如何输出 ab
一道在知乎讨论得很火热的 Java 题,网友们的脑洞能给出一些什么样的答案呢?
33 8
|
7月前
|
JavaScript Java 测试技术
基于Java的数学竞赛网站的设计与实现(源码+lw+部署文档+讲解等)
基于Java的数学竞赛网站的设计与实现(源码+lw+部署文档+讲解等)
46 0
|
Java 机器人 数据安全/隐私保护
蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)(C++语言)(Python)
蓝桥杯历届真题题目+解析+代码+答案(2013-2020)(JavaA、B、C组)(C++语言)(Python)
349 0
|
算法 安全 数据安全/隐私保护
​电量计基础知识介绍:
​电量计基础知识介绍:
264 0
|
网络协议 安全 算法
大网进阶安全刷题讲解(带答案)(1)(上)
大网进阶安全刷题讲解(带答案)(1)
93 0
|
网络协议 安全 算法
大网进阶安全刷题讲解(带答案)(1)(下)
大网进阶安全刷题讲解(带答案)(1)
107 0
「牛客网C」初学者入门训练BC139,BC158
题目:BC139矩阵交换 难度:中等 输入描述: 第一行包含两个整数n和m,表示一个矩阵包含n行m列,用空格分隔。 (1≤n≤10,1≤m≤10)从2到n+1行,每行输入m个整数(范围-231~231-1),用空格分隔,共输入n*m个数,表示第一个矩阵中的元素。接下来一行输入k,表示要执行k次操作(1≤k≤5)。接下来有k行,每行包括一个字符t和两个数a和b,中间用空格格分隔,t代表需要执行的操作,当t为字符'r'时代表进行行变换,当t为字符'c'时代表进行列变换,a和b为需要互换的行或列(1≤a≤b≤n≤10,1≤a≤b≤m≤10)。 提示:当t为别的字符时不需要处理
「牛客网C」初学者入门训练BC156
题目:BC156 牛牛的数组匹配 描述: 牛牛刚学会数组不久,他拿到两个数组 a 和 b,询问 b 的哪一段连续子数组之和与数组 a 之和最接近。 如果有多个子数组之和同样接近,输出起始点最靠左的数组。 输入描述: 第一行输入两个正整数 n 和 m ,表示数组 a 和 b 的长度。 第二第三行输入 n 个和 m 个正整数,表示数组中 a 和 b 的值。 输出描述: 输出子数组之和最接近 a 的子数组 示例1 输入: