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 请说明和超星视频做法区别,各自优缺点。
超星老师是将其分装成一个函数,且判断的条件较为单一全面,
我将判断条件较多的整合到一起,显得代码不那么易读。
大致思路差不多。