随笔- 62  文章- 1  评论- 5  阅读- 13061 

0.展示PTA总分


1.本章学习总结

1.1 学习内容总结

1.1.1数组中如何查找数据,有哪些做法

1.顺序查找法
假设数组长度为n

for 0 to n-1
if(数x==a[i])
则此时该数组的下标
end for

2.折半查找法
设置上限下限分别为low,high
中间的查找数mid

while(low<=high)
mid = (low+high)/2
当x与a[mid]相同时保存下标
小于时则将范围缩小到上半的数组 则high = mid -1
大于时则将范围缩小的下半的数组 则low = mid +1
重复寻找直至找到数组或者结束循环

1.1.2数组中如何插入数据,怎么做,可以写个伪代码或动态图展示方法

先将数组排序
当该数大于或者小于该数组的最大或者最小值时
直接在前后插入
前面插入时应先将后面的数往后移1:

for n-1 to 0
a[i+1] = a[i]
end for

当该数大小位于中间时

for 0 to n-2
if(x>=a[i]&&x<a[i+1])
则在该i+1位置插入
end for
for n to i+1
a[i+1] = a[i]
end for
a[i+1] = x

1.1.3数组中如何删除数据,这个有多种做法,请一一展示。

1.依次遍历循环中的每一个元素,直至找到该数将后面的数前移覆盖该数

for 0 to n-1
if(x==a[i])//查找到该数
for i to n-2//将该数的后面前移一位
a[i] = a[i+1]
end for
end if
end for

2.利用另一个数组保存删除数据后的数组

j = 0
for 0 to n-1
if (x==a[i]);
else
b[j] = a[i]
j++
end if
end for

1.1.4数组中目前学到排序方法,主要思路?

1.冒泡排序法
主要思路:
按顺序将数与下一个数相比较 如果较大则交换数组以此来让最大的数到最后一位

for 0 to n -1
for 0 to n-1-i
if(a[i]>a[i+1]
交换
end if
end for
end for

2.选择排序法
主要思路:遍历数组,找出最大的值放到最前

for 0 to n-1
for i to n-1
if(a[i]<a[j])
交换值
end if
end for
end for

3.哈希数组排序
利用哈希数组的下标来存放数
如果数存在则哈希值+1
(适用于最大值较小的数列)

1.1.5数组做枚举用法,有哪些案例?


该题可用数组来保存投哪一个节目的人数

1.1.6哈希数组用法,目前学过哪些案例,举例展示。


1.1.7字符数组、字符串特点及编程注意事项。

字符串在结尾有'\0' 可以以此为循环结束的判断条件
注意数组的上限 不能越界
scanf 来输入字符数组遇到空格回车TAB都会结束,所以应该用fgts或者gets,fgets会将回车输入

2.PTA实验作业

2.1 7-1 统计一行文本的单词个数

2.1.1 伪代码

while 输入数组直至读到'.'
if(c!=' ')
则字符数+1
else
if (字符数不为0)
单词个数+1,并将字符数重置为0
end while

2.1.2 代码截图

2.1.3 找一份同学代码(尽量找思路和自己差距较大同学代码)比较,说明各自代码特点

该同学利用字符串的处理方式,使代码更为简洁。

2.2 7-14 找鞍点

2.2.1 伪代码

for 0 to n//行最大数
for (j = 0; j < n; j++)
求行最大值,并保存位置:r[i] = i * 10 + j;
end for
end for
for 0 to n//列最小数
for to n
求列最小值,并保存位置:c[j] = i * 10 + j;
for 0 to n
for 0 to n
if (c[i] == r[j])
输出位置:printf("%d %d", c[i] / 10, c[i] % 10)

2.2.2 代码截图

2.2.3 请说明和超星视频做法区别,各自优缺点。

该题我是依次求行与列的最大的位置,与列的最小值的位置

并用两个数组来保存最大值与最小值的行与列的位置,其中行数*10+列
则用两个数组比较,如果两个数组中有相同的数,那么则有鞍点

超星中老师是用先找出列的最小值然后判断该值是否为行最大值

我的方法如果矩阵数较大,容易会不同行不同列保存的数相同

2.3 切分表达式

2.2.1 伪代码


按照pta给出的提示,分别用判断语句用来判别这些特殊情况

for 0 to s[i]!='\n'
输出该字符
if(开始时该字符不为-或者'+'
else if (该字为'-'且上一字符为'(')
else if (下一个字符为小数点或者该字符为小数点)
else if(前面后面都不是数字)
则输出换行
end if
end for

2.2.2 代码截图

2.3.3 请说明和超星视频做法区别,各自优缺点。

超星老师是将其分装成一个函数,且判断的条件较为单一全面,
我将判断条件较多的整合到一起,显得代码不那么易读。
大致思路差不多。

 posted on     阅读(133)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示

目录导航