C语言博客作业04--数组
0.展示PTA总分
1.本章学习总结
1.1 学习内容总结
-
数组中如何查找数据,有哪些做法:遍历法,二分法。(二分法只适用于按顺序排列的整型数组)
-
数组中如何插入数据,怎么做,可以写个伪代码或动态图展示方法
-
数组中如何删除数据,这个有多种做法,请一一展示。
1.通过平移数组删除
2.定义第二个数组删除
-
数组中目前学到排序方法,主要思路?
1.冒泡法:两两依次比较,并作交换,交换次数多
2.选择排序法是每次循环找出最值,循环结束后将最值调整到合适位置,交换的次数少。 -
数组做枚举用法,有哪些案例?
1.调查电视节目受欢迎程度那题,用数组下标1~8作为节目名称,可读性强
2.阅览室那题,用数组下标做书号 -
哈希数组用法(以空间换时间)pta有重复数据那题应用,代码如下
-
二维数组当列出了所有行就可以省略行长度
-
字符数组和字符串数组的区别,字符串后面有0
-
fgets()读取到换行符、文件尾或读完n-1个字符结束,包括换行符。输出时要用for(i=0;a[j] &&a[j]!="\n';i++)
-
scanf("%c",a);输入的字符串以0结尾
-
定义数组时后其中的所以元素会被随机赋值,可以加上static将其中的所以元素初始化为0
-
在有序的数组中查找指定元素时可以用二分法以减少查找时间
-
在查找重复数字时可以再定义一个数组,以空间换取时间(pta 一维数组第五题 )
-
字符串的输入:
-
字符串的输出:
1.2 本章学习体会
- 1.在学习数组的初始化时,学习了可以使用static进行初始化,而不必用到for循环
- 2.在研究二维数组时,要使用它巧妙的关系,主对角线:i=j,上三角i<=j,下三角i>=j,副对角线i+j=n-1
- 3.一些字符串(或字符数组)的使用可以方便我们解决一些以前需要switch或大量if才能解决的问题,非常方便
- 这三周的代码量大概在800左右
2.PTA实验作业
2.1二分查找法
==========
2.1.1 伪代码
2.1.2 代码截图
2.1.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
4 | weizhi:3 | 数据正常 |
15 | not found | 数据异常 |
2.1.4 PTA提交列表及说明
- 1.编译错误:在主函数中写了Find(a[], key),改成Find(a, key)就好
- 2.答案错误:while循环中在输出weizhi:时没有break;导致循环不断,补充后答案正确。
- 3.老师虽然上课讲了一遍但是自己下手时还是没有思路,一是忘记要通过处理下标,二是没有找好下标之间的关系。
2.2找鞍点
2.2.1 伪代码
2.2.2 代码截图
2.2.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
2 1 | 数据正常 | |
none | 数据正常 |
2.2.4 PTA提交列表及说明
1部分正确:测试点有并列极值元素,最后一个是鞍点不通过,于是将if (a[i][j] > a[i][maxindex])改为if (a[i][j] >= a[i][maxindex]),即可通过
2.部分正确:不存在鞍点的测试点不通过,发现没有考虑该情况,加上即可
2.3jmu-c-大数加法
2.3.1 伪代码
2.3.2 代码截图
2.3.3 造测试数据
输入数据 | 输出数据 | 说明 |
---|---|---|
105688868660766755366459722082203888205 | 数据正常 |
2.3.4 PTA提交列表及说明
1.答案错误:输出结果为105688868660766755366459722082203888205-67,检查后发现超过了数组的范围,重新编写后正确
3.阅读代码
题目
做法1
考虑所有两两柱子之间形成的矩形面积,该矩形的高为它们之间最矮柱子的高度,宽为它们之间的距离,这样可以找到所要求的最大面积的矩形。
但是在时间上我们需要使用循环两次的时间找到枚举出来的所有柱子对之间的最矮柱子,节省了空间。。
做法2
确定了最矮柱子以后,矩形的宽尽可能往两边延伸,在最矮柱子左边的最大面积矩形和在最矮柱子右边的最大面积矩形。
值得学习的是:优化了时间和空间的利用率,以空间换时间提高了效率