T1蛇形矩阵
题目:输入:n,m;(分别代表行,列)
输出:按指定形式输出
我觉得这题关键的是,想到可以把这个二维数组的边界当作是“变化的”,比如最初一圈向右走,向下走,向左走,然后再向上走时,最后是不能走到第0行的(可以当作上边界+1),接着第二圈向右走时,最后不能走到第m-1列的(可以当作右边界-1)......
所以我们可以设些变量来接收这些“变化的”边界;即代码中的:int top=0,bottom=n-1,left=0,right=m-1;//分别代表上边界,下边界,左边界,右边界
然后用:int t,b,l,r; 这些变量分别代表向下走,向上走,向右走,向左走
接着便是循环:通过观察我们可以发现二维数组中的元素是从1逐个增加至n*m的,所以我们可以设一个变量k=1,同时来控制循环结束:即while(k<=n*m)
最后在循环体中,我们就可以通过控制“走的方向”来为二维数组中各个元素赋值。比如通过下面代码控制“向右走”:
while(l<=right){
a[top][l++]=k++;//赋值(在“上边界”时向右走)}
top++;//下一次转回来时须指向向内一圈
t=top;
......(向下走,向左走,向上走原理一样)
T2有序单循环列表的插入
(因为之前没学过链表,就看看了看学长发的b站上关于单链表的视频,但是还没多做些题练习一下,所以实在看不出循环怎么弄,就先只写了有序单链表的插入><)
(然后,根据我目前刚学的单链表的相关知识~~)
我们首先要知道在单链表中,每个节点除了存放数据元素,还存储指向下一个节点的指针。
所以我们先写一个结构体:(刚发现怎么粘贴照片~!~)
里面包含数据域和指针域 ,并用构造函数初始化新创建的节点
然后关键的部分就是怎样有序插入指定节点:即遍历链表,找到一个节点,其值小于我们要插入节点的值,并且下一个节点的值大于我们要插入节点的值
要注意插入新节点时,不能交换左图中最后两行代码,否则可能会导致节点丢失
其中,如果链表为空链表或要插入的节点小于链表中第一个节点的数值时,我们可以直接把要插入的节点插在链表中的第一个节点,然后返回。代码如下:
T3类设计题目
我觉得本题对初学者来说需要注意的点是:在派生类(即子类)的构造函数需要初始化基类(即父类)的部分时,派生类构造函数会对基类构造函数调用,以确保基类对象正确的初始化。即:
(我就是没在子类的构造函数后面写Account(b),看了半天!!)
然后一般把属性设为私有,可以提高数据安全性;在基类中,可以把基类的属性设为保护权限,这样可以是派生类能够访问和修改这些属性。