博客作业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个开关分别控制。比寻找坐标更加容易。