04-树4 是否同一棵二叉搜索树 分析: 对于给定的初始插入序列和待检查序列来说,第一个数一定是根结点;之后比根结点小的数组成的序列(相对位置不变)就是左子树,同理大的就是右子树 根据分析1中的左右子树序列,第一个数又分别是他们的根结点 综上,只需不停递归,直到左右子树至少有一方无左右子树为止;在递归过程中,若对应的左子树序列出现了相应位置元素不同的情况,那么就不是同一棵树 代码如下 #include <iostrea...
03-树3 Tree Traversals Again 分析: 题意:给出一棵二叉树的中序遍历步骤(栈思路),输出后序遍历结点 根据中序思路可知,当push一个结点时,若上一步是push,则该结点是上一步push结点的左子树;若上一步是pop,则该结点是pop结点的右子树 思路: 按照分析2梳理整个树的每个结点及其左右结点 将根节点放进一个栈中,重复执行步骤3,直到栈为空 判断栈顶结点,若该结点无左右子树,该结点出栈; 若该结点有左子树,左子树...
02-线性结构4 Pop Sequence 题意: 第一行输入三个整数M N K,分别代表栈容量,进栈序列长度,待核实的出栈序列行数 随后K行输入出栈序列,要求核实其是否是一个可能的出栈序列 分析: 根据题意,出栈元素只能是从1到N 可以根据当前的出栈元素,判断栈内剩余元素数量以及栈顶元素 又通过剩余元素数量及栈顶元素判断下一个出栈元素是否符合栈要求 代码如下 #include <iostream> using nam...
03-树1 树的同构 思路:基本参照慕课上的浙大数据结构思路来,判断同构的函数处做了一些小修改 代码如下 #include <iostream> using namespace std; typedef struct tree{ char ch; int Left, Right; }Tree; Tree T1[10], T2[10]; int CreatTree(Tree T[]); bool ...
1056 组合数的和 分析: 每个数字在个位数和十位数上都出现了N-1次 代码如下 #include <iostream> using namespace std; int num[11]; int main() { int N; scanf("%d", &N); for(int i = 0; i < N; i++) scanf("%d", &num[i]); int...
1050 螺旋矩阵 分析: 找m和的时候,m的值从N遍历到srqt(N),找出m和n差值最小的那一对 难点在于怎么输出螺旋形,一个想法是按照螺旋形的顺序将排好序的数据依次放入一个二维数组中 可以用4个while实现2中步骤 代码如下 #include <iostream> #include <algorithm> #include <cmath> using namespac...
1051 复数乘法 复数乘法过程: 代码如下 #include <iostream> #include <cmath> using namespace std; int main() { double R1, P1, R2, P2; scanf("%lf %lf %lf %lf", &R1, &P1, &R2, &P2); double A, B; ...
1045 快速排序 思路一(很瓜的思路): 遍历数据的同时更新该数据左边的最大值 将原数据从小到大排序后放入另外一个数组中,再将这些数据存在另外一个数组的对应下标里作为右方最小值 遍历数据时,若当前右方最小值等于该数据,将对应元素置零,右方最小值变为后边的第一个非零值 采用思路一可以求解,然而存放右方最小值的数组大小达到了109,该思路行不通 上网查询,参考该博客的思路二,三,写下代码 思路2 #includ...
02-线性结构3 Reversing Linked List 分析: 用结构体数组来模拟实现链表,每个元素的下标代表其地址 新开一个数组,按顺序存储一个完整链表中的所有结点 再开一个数组,将2中数组的元素按每K个反向存储的方式存储,最后输出 代码如下 #include <iostream> using namespace std; struct Node{ int ad, data, next; }; struct Node Nd[10...
1049 数列的片段和 分析: 20分,暴力求解多半超时,需要降低时间复杂度 列出N = 4 的所有子序列(底色黄),找规律(最简方法见最后方,该分析有问题) 也就是说,将所有底为黄的数字相加就是要输出的结果了 横着看的话,当序列第i个元素i开头,该行的所有和就等于i个i的全序列和(即从第一个元素相加到第i个元素)相加,再减去i之前的所有全序列和 所以,在输入时就计算出i的全序列和,放入数组中,就简单了 代码如下...
1048 数字加密 分析: 根据题意,并不难,就是要点在于按要求逐个处理单个数字 唯一一点不好处理的是输入的A和B不一定等长,所以还需要在短的字符串前面填充字符,使得二者等长; WA了一次(测试点2和5),因为我用的其他字符填充,查询其他人答案发现需要用’0’填充 所以我仍然不知道为什么要填‘0’,按照输入样例的理解,如果对应位上A没有数字,直接输出该位置上的B不就行了吗 代码如下 #include <i...
1044 火星数字 火星人是以 13 进制计数的: 分析: 题目要求输入数字转化为火星文,或者输入火星文转化为数字 从输入样例中可以看出,输入数据类型与个数不可控,需要判断 用空格判断输入数据个数,用第一个输入数据的类型来确定输入类型 将火星文放在数组中,对应下标是它们对应的数字 思路: 使用string来读取数据,%c读取第一个数据之后的空白符,确定是回车还是空格,再确定是否读取第二个数据 若第一个数据是数字...
02-线性结构1 两个有序链表序列的合并 分析: 题目要求写一个函数,将递增链表L1和L2合并为一个非递减函数 比较两链表的首结点,选其中最小值放入有序链表中,然后将剩下的值和最小值的下一个结点值比较 重复2,直到有一条链表的所有结点都已排序 将另外一条链表的剩余结点全部接上 思路: 创建一个结点,作为最终链表的头结点 再创建三个结点指针,分别指向已排序链表的尾结点,链表L1,L2的未排序部分的首结点 根据分析2,3,4写入代码 ...
1042 字符统计 思路: 老办法,出现次数放在以对应ASCII码为下标的数组元素里 逐个读取字符,不是字母直接跳过,若是大写转小写 #include <iostream> #include <cctype> using namespace std; int asc[130] = {0}; int main() { char ch; while(ch != '') { s...
1040 有几个PAT 分析: 根据题意,对于给定的字符串来说,能组成多少个PAT,关键在于有多少个A 对于每个A而言,它能组成的PAT个数是它前面的P个数和后面的T个数的乘积 最后把每个A能组成的PAT个数相加即可 思路: 将字符存入数组的同时统计T个数 遍历数组,统计当前出现的P和T的个数 当遍历到A时,将P * (T总数-T当前个数)加到和sum中 如果sum大于1000000007,取余 代码如下 #i...
1039 到底买不买 思路: 用各字符的ASCII码表示下标,数组相应元素表示该字符出现次数 代码如下 #include <iostream> using namespace std; int num1[130] = {0}; int num2[130] = {0}; int main() { char ch; scanf("%c", &ch); while(ch != '') { ...
1038 统计同成绩学生 思路: 建立一个数组,每个元素存储其下标对应成绩出现的次数 代码如下 #include <iostream> using namespace std; int num1[101] = {0}; //存放成绩为下标的人数 int main() { int N; scanf("%d", &N); for(int i = 0; i < N; i++) { in...
1037 在霍格沃茨找零钱 思路:直接按照减法算A-P就行 代码如下 #include <iostream> using namespace std; int swap(int &a, int &b); int main() { int G1, G2, G3, S1, S2, S3, K3, K1, K2; scanf("%d.%d.%d %d.%d.%d", &G1, &...
01-复杂度2 Maximum Subsequence Sum 该题和 01-复杂度1 最大子列和问题 类似,题目要求输出给的序列的子序列最大和,另外增加了几点要求 如果输入序列全是负数,和输出0,还要输出第一个和最后一个元素 如果有不只一串子序列的和是最大的,那么需要输出这些子序列的最左端和最右端中的最小索引值对应的值(也就是第一个满足的字串的左右值) 分析: 根据 在线处理 算法找最大子序列,在找的过程中,如果ThisSum为0,说明开始找新的一段...
01-复杂度1 最大子列和问题 根据中国MOOC大学上浙大的数据结果课程给出的 在线处理 算法,在此对该算法的思路再进行一遍梳理 题目要求求出子序列的最大和,那么如何确定该子序列呢 首先,对于随便一个子序列,假设当前序列和ThisSum已经小于0,那么对于它的前后任何一个序列,都是不应该把它加上去的,因为这样之后会让新的序列和减小; 所以,序列和为负数的子序列需要抛弃 换句话说,序列和为负数的子序列,不能参与到其他序列中,它...