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 2020-12-13 17:49    阅读(125)  评论(0编辑  收藏  举报