博客作业4-数组

1.本章学习总结

1.1 思维导图

1.2 本章学习体会及代码量学习体会

1.2.1 学习体会

通过这几周的函数学习,让我明白了数组的复杂,在很多时候运用数组。很没头绪,不知道数组是如何的工作的,它可以处理很多比较复杂的问题。在不段的学习中,做题目中,不断的明白了,数组的功能,
就是一个有存储功能的数据库,在代码中,如果要多次使用同一个数据,用普通的方法很难,因为普通的方法的数据往往只能用一次,遇见数组,可以多次使用。数组不仅仅在这里有很大的功能,还可以简化很多复杂的题目。比如统计天数的,简单的用switch语句代码非常复杂,如果用二维数组,非常简单。数组的使用有很多的细节,比如变量的定义,数组的长度,很容易短。还有数组的遍历,开始是从0开始不是1开始。很多细节,这几周的学习,说明了写题目的重要性,只有锻炼题目,才可以很好的理解知识,还有细节还是很重要的。以后要多多的训练,刷题目。对数组中很多基本的方法要熟悉,比如冒泡,选择等等。只有在训练中才能巩固。

1.2.2 代码累计

2.PTA总分

2.1截图PTA三次题目集:一维数组、二维数组和字符数组共3次题目集的排名得分



2.2 我的总分:

285+85+130=415

3.PTA实验作业

3.1 PTA题目1

3.1.1 算法分析

定义长度n,移动次数m ,存放首元素的temp,移动循环需要的k;
- for i=0 to n 
    scanf  //读入
end for

- if m>n then m=m-n//变更左移次数
- for i=1 to m //循环左移次数
 - temp =a [0] //存放第一个元素
   - for k to n-1  //后面元素左移
    - end for
- a[n-1]=temp //第一元素存为最后一个元素
- end for

- for i=0 to n 
    printf  //输出
end for

3.1.2 代码截图

3.1.3 PTA提交列表及说明

1.没有考虑到把第一个元素要存起来,直接进行移动,这样最后一个元素是输出随机数。

用temp存第一个元素,最后把temp存为最后一个元素。这样就可以避免元素的丢失。

2.没有考虑到m>n.的情况,这样运行会无效。

用if判断,如果m>n;就是重复移动,只需要移动m-n次就行。直接变化移动次数m=m-n。

3.2 PTA题目2

3.2.1 算法分析

定义判断行列的开关flag和temp为0; 定义统计鞍点个数的count=0;
- for i=0 to n 
    scanf  //读入
end for

- for i=1 to n //开始遍历
     - for j to n 
      - temp flag =0//每一次检索开关都要归0
          - for k to n//遍历相同行的元素
             - if(a[i][j]<a[i][k])then flag=1//如果同一行中a[i][j]不是最大的元素,不符合题意
          - end for
          - for k to n//遍历相同列的元素
             - if(a[i][j]<a[k][j])then temp=1//如果同一列中a[i][j]不是最小的元素,不符合题意
         - end for
    - end for
- end for

- if temp==0&&flag==0  then count++  printf //如果开关没变化,说明行列都符合题意输出。并统计个数
- if count == 0
    printf  NONE //count=0说明没有一个鞍点 输出none;

- for i=0 to n 
    printf  //输出
end for

3.2.2 代码

3.2.3 PTA提交列表及说明

1.没有鞍点的情况,输出有错误。一开始我是用这样判断

实际上flag0||temp0 不能判断有么有鞍点,所以我引进了一个count来统计,count=0说明没有。

3.3 PTA题目3

3.3.1 算法分析

定义0数组 hash 长度为256;定义原数组a;定义要删除的元素的数组b
-gets a b //输入数组a  b
- for i=0 to  
  - hash[b[i]]++;//便历要删除的数组,根据元素的ASCII码将hash数组中的元从0变1
- end for
- for i=0 to  
  - if hash[a[i]]==0 then putchar(a[i]); //根据hash中的0/1判断是否属于要删除的元素
- end for

3.3.2 代码

3.3.3 PTA提交列表及说明

1.用一般的方法不会处理这个题目

老师讲了hash的方法后。才会用这个著名的方法去查找要删除的元素。然后判断输出就行

4.代码互评

4.1 代码截图

我的代码:

同学代码:

4.2 二者的不同

1.我是使用了2个开关分别判断行列是否满足。

同学的代码是分别找出来满足的行列坐标,如果最后找出来的行坐标和列坐标都相同,说明这个元素都符合题意。就输出行,列坐标。

2.同学的代码是用flag控制无鞍点的输出。

我的代码是使用了count的量来判断是否有鞍点。

3.我觉得我的代码比同学的更好理解。虽然思路大致相同,但是在复杂程度上,我的比他要简单点。
2个开关分别控制。比寻找坐标更加容易。

posted @ 2018-12-08 22:13  秋斌  阅读(248)  评论(0编辑  收藏  举报