zoukankan      html  css  js  c++  java
  • C语言博客作业04--数组

    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字符数组、字符串特点及编程注意事项。

    字符串在结尾有'' 可以以此为循环结束的判断条件
    注意数组的上限 不能越界
    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]!='
    '
      输出该字符
      if(开始时该字符不为-或者'+')
      else if (该字为'-'且上一字符为'(')
      else if (下一个字符为小数点或者该字符为小数点)
      else if(前面后面都不是数字)
        则输出换行
      end if 
    end for
    
    

    2.2.2 代码截图

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

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

  • 相关阅读:
    日报10.29
    日报10.28
    日报10.27
    周进度总结-6
    日报10.25
    日报10.23
    日报10.22
    日报10.21
    日报10.18
    STL bitset
  • 原文地址:https://www.cnblogs.com/jy00/p/14128279.html
Copyright © 2011-2022 走看看