题目1:7-1 数组元素循环右移问题
(一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(≥0)个位置,
即将A中的数据由(A0A1⋯AN−1)变换为(AN−M⋯AN−1A0A1⋯AN−M−1)(最后M个数循环移至最前面的M个位置)。
如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?)
1. 本题PTA提交列表
2. 设计思路:要实现数组元素循环右移,先对对右移位数m分析,如果m是数组元素个数n的整数倍,则直接输出数组a[n],
若m不是n的整数倍,则用取余的方式(h=m%n)来求出余数h,向右循环移动m位后,第一个输出的元素就是a[n-h],其后的元素顺序不变,
逐个输出,因为在a[n-h]之前的元素顺序不变,所以再用一个新的循环将其输出即可。
(流程图)
3.本题调试过程碰到问题及PTA提交列表情况说明。
这个代码出现了多种错误,主要原因是算法思路不正确,无法求出正确的结果,所以需要转换解题思路,重新编代码。
错误提示为格式错误:错在每次输出都在每个数前加了个空格符,应改成每两个元素间有一个空隔隔开
问题仍出现在格式上,输出的第n-1个元素和第0个元素之间少了一个空格
二、同学代码结对互评
1.同学互评照片。
左:我的代码 右:小萱的代码
2.不同点:我的代码考虑了循环右移时会遇到的特殊情况(m是n的整数倍时),遇到该情况直接输出数组,节省运行时间,
另一种情况则是通过分步输出达到右移效果,但整个程序会相对复杂些;小萱的代码则直接对数组元素进行重新排列达到右移,
她的代码更加简洁,但没有列出特殊情况,所以有时候运行时间会更长些。我觉得在这道题上我们的代码各有优势,
如果能综合一下可能会使程序更加优化。
题目2:方阵循环右移
(本题要求编写程序,将给定n×n方阵中的每个元素循环向右移m个位置,即将第0、1、⋯、n−1列变换为
第n−m、n−m+1、⋯、n−1、0、1、⋯、n−m−1列。
1. 本题PTA提交列表
2. 设计思路:利用数组向右移动的思想,先判断m是不是n的整数倍,是则利用双重循环直接方阵输出,若不是再用m%n取余数t,
利用循环嵌套输出移动后的方阵,先用for(i=0;i<n;i++)做行循环,再用for(j=0;j<n;j++)做每行向右循环移动m位,
第一个输出的元素就是a[i][n-h],其后的元素顺序不变,逐个输出,因为在a[i][n-h]之前的元素顺序不变,所以再用一个新的循环将其输出即可。
(流程图)
3.本题调试过程碰到问题及PTA提交列表情况说明。
这条代码的第8行弄混淆了m和n,错写成了i<m,应该为i<n,才能输入格式正确的方阵
这条代码错在审题不认真,题目要求在每个元素后有一个空隔,而这里写成每两个元素之间有一个空隔,应在输出处改为("%d ",a[i][j]);
二、同学代码结对互评
1.同学互评照片。
左:我的代码 右:蔚悦的代码
不同点:(1)我对特殊情况(m是n的整数倍时)做了考虑,遇到该情况直接输出方阵,节省运行时间,
蔚悦没有对这种情况做判断;(2)我用分开输出的方式输出方阵,而蔚悦则直接用循环输出方阵;
我认为蔚悦的代码更加精简一些,我更喜欢蔚悦的代码!
题目3:求矩阵各行元素之和
(本题要求编写程序,求一个给定的m×n矩阵各行元素之和。)
1. 本题PTA提交列表
2. 设计思路:输入一个数组,定义一个sum,设初值为0,利用循环和公式sum=sum+a[i][j],将数组元素逐个累加得到总和。
(流程图)
3.本题调试过程碰到问题及PTA提交列表情况说明。
本题提交一次通过
二、同学代码结对互评
1.同学互评照片。
左:我的代码 右:小萱的代码
不同点:(1)我的代码通过调用函数完成求和,小萱的代码是直接进行求和,她的代码格式不是很正确;
我更喜欢我的代码,格式比较准确,知识综合性利用更大些。
三、截图本周题目集的PTA最后排名。
四、本周学习总结
1.你学会了:一维数组和二维数组的定义和运用
2.本周的内容,我对二维数组的应用还不熟练,在和函数一起应用时容易出现错误,
3.11,14,18题做错了,正在通过询问同学帮忙一起解决!
2.考试结果不满意,要通过不断的加强练习来改进?