数组

Posted on 2018-01-14 22:37  海团  阅读(220)  评论(0编辑  收藏  举报

题目1:7-1 数组元素循环右移问题

(一个数组A中存有N(>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(0)个位置,

即将A中的数据由(A0​​A1​​AN1​​)变换为(ANM​​AN1​​A0​​A1​​ANM1​​)(最后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、⋯、n1列变换为

nm、nm+1、⋯、n1、0、1、⋯、nm1列。

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.考试结果不满意,要通过不断的加强练习来改进?

Copyright © 2024 海团
Powered by .NET 8.0 on Kubernetes