C++算法笔记
文章平均质量分 52
晚风也很浪漫
Java是世界上最好的语言
展开
-
PAT甲级1033 To Fill or Not to Fill (贪心算法)
原题链接PAT甲级1033题目大意一辆车从杭州出发,前往目的地,途径若干个加油站,若能到达目的地,输出加油所花费的钱,若不能,输出能到达的最大距离。解题思路本题的核心思想就是尽量使用最便宜的油行驶。所以我们建立一个数组cheapSta[500],cheapSta[i]表示从加油站i出发在满油行驶距离之内的第一个比当前油站价格更低的站或者价格最低的油站。这个数组也代表了行驶线路。建立递归函数Travel()。路线既然确定好了,那么我们需要判断汽车怎么加油。根据贪心算法的思想,汽车应尽量使用便宜的原创 2022-02-13 23:07:23 · 1191 阅读 · 0 评论 -
PAT甲级 1020 Tree Traversals(二叉树的遍历)
PAT甲级1020 Tree Traversals(二叉树的遍历)二叉树的四种常用遍历方式Tree Traversals原题链接PAT甲级 1020 Tree Traversals题目大意给出N个结点的二叉树的后序序列和中序序列,输出该二叉树的层序遍历序列。解题思路根据后序序列和中序序列构造出二叉树的结构。如题例,后序序列的最后一个结点是4,是根结点。根据中序序列,4的左半部分是4的左子树,4的右半部分是4的右子树。将左右子树分别看作一个树,在对应后序序列找到最后一个结点(根结点)原创 2022-02-09 15:39:05 · 1275 阅读 · 2 评论 -
PAT甲级 1012 The Best Rank
原题链接PAT甲级1012 The Best Rank题目大意输入N个学生的学号,C语言、数学、英语三门科目的成绩,以及M个学号,对这M个学号依次输出其最好排名,以及排出最好排名的优先级最大的科目(C、M、E)或平均分(A)。如果输入的学号不在成绩列表中,输出N/A,如果不同的排名方法有相同的最好排名,输出优先级更大的科目(A>C>M>E)。解题思路题不难,使用结构体定义每个学生的学号和成绩信息。调用algorithm库的排序算法即可实现(对结构体类型的vector排序需要重写比原创 2022-01-26 08:47:38 · 329 阅读 · 0 评论 -
PAT甲级 1010 Radix
原题链接PAT甲级 1010 Radix题目大意输出四个数分别为N1,N2,tag,radix。若tag为1,radix是N1的进制数,若tag为2,radix为N2的进制数。比如给出tag=1,则判断N2在不同进制的情况下是否有可能与N1相等,若有可能输出相等情况下的最小进制数,若没有可能相等,输出Impossible。tag=2则判断N1是否有可能与N2相等解题思路输入时,判断tag,若tag==2,交换N1和N2,这样radix始终是N1的进制数。根据redix进制得到N1的十进制数值v原创 2022-01-24 15:11:28 · 316 阅读 · 0 评论 -
PAT甲级 1007 Maximum Subsequence Sum
原题链接PAT甲级 1007 Maximum Subsequence Sum题目大意输入一个K个数的序列,找出一个子序列,该子序列的和是所有子序列中最大的,并输出最大子序列的和、第一个数、最后一个数。如果该序列全为负数,则输出最大和为0、该序列的第一个数和最后一个数。解题思路在输入K个数的序列时,生成一个和序列sum,sum[i]表示该序列前i个数的和。那么子序列(下标从a到b)的和就可以表示为 sum[b]-sum[a-1] ,要使该子序列的和最大,则sum[a-1]要最小,故定义一个变量min原创 2022-01-22 14:58:08 · 458 阅读 · 1 评论 -
vector二维结构的使用
先看下面的代码段#include<iostream>#include<vector>using namespace std;int main(){ vector<int> v[10]; v[0].emplace_back(101); v[0].emplace_back(102); v[0].emplace_back(103); v[1].emplace_back(111); v[2].emplace_back原创 2022-01-20 20:42:01 · 833 阅读 · 0 评论 -
归并排序算法的C++实现
归并排序是一种常用的排序算法,其原理是将每一个数看作一个有序序列,然后不断地将两个相邻的有序序列合并成一个有序序列,最后剩下一个有序序列就是排序后的结果。用到的是递归和分治思想。#include<iostream>#include<malloc.h>using namespace std;void merge(int arr[], int tempArr[], int left, int mid, int right){ int l_pos = left; //原创 2022-01-17 14:54:40 · 1066 阅读 · 0 评论 -
PAT乙级真题1020:完美数列
题目描述给定一个正整数数列,和正整数p,设这个数列中的最大值是M,最小值是m,如果M <= m * p,则称这个数列是完美数列。 现在给定参数p和一些正整数,请你从中选择尽可能多的数构成一个完美数列。输入描述输入第一行给出两个正整数N和p,其中N(<= 105)是输入的正整数的个数,p(<= 109)是给定的参数。第二行给出N个正整数,每个数不超过109。在一行中输出最多可以选择多少个数可以用它们组成一个完美数列。输入例子10 82 3 20 4 5 1 6 7原创 2022-01-15 20:27:20 · 566 阅读 · 2 评论 -
C++ string常用操作
写此文以便需要时查阅字符串的初始化这里介绍几种特殊的初始化方式,可能会比较少见。string1(string2)将字符串string2直接拷贝给string1string s1 = "happy~day";string s2(s1);string(int length, char c)将length个字符c组成的串赋值给stringstring s3(10, 'b');string(string s, int start, int length)取s字符串从start位置开始的le原创 2021-11-22 20:36:13 · 616 阅读 · 1 评论 -
C++ vector容器的使用
写此文以便需要时查阅头文件#include<vector>初始化申请一个有length个长度的vector容器(尽量在初始化时指定长度)vector<type> vec1(int length)也可以从数组中获得初值int b[7]={1,2,3,4,5,6,7};vector<int> vec2(b,b+7);常用内置函数vector.assign(iterator1, iterator2)将两个迭代器范围内的元素赋值给vector,左闭右开原创 2021-11-21 12:34:28 · 583 阅读 · 0 评论