![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++算法题解
只图成果
一个心怀壮志的小白,正在学习中。。。
展开
-
PAT 数组元素循环右移问题(转自柳神)
一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A0 A1……AN-1)变换为(AN-M …… AN-1 A0 A1……AN-M-1)(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法?输入格式每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。输出格式在一行中输出循环右移M位以转载 2020-12-29 19:56:06 · 165 阅读 · 0 评论 -
2-路归并排序(递归)与 (非递归)
2-路归并排序的原理是,将序列两两分组,将序列归并为[n/2]个组,组内单独排序;然后将这些组再两两归并,生成[n/4]个组,组内再单独排序;以此类推,直到只剩下一个组为止。时间复杂度为O(nlogn)。#include <iostream>using namespace std;const int maxn = 100;//归并两个有序区间void merge(int a[], int L1, int R1, int L2, int R2){ int i = L1, j原创 2020-12-27 16:33:10 · 475 阅读 · 0 评论 -
n皇后问题
Problem Description在N*N的方格棋盘放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在与棋盘边框成45角的斜线上。你的任务是,对于给定的N,求出有多少种合法的放置方法。考虑每行只能放一个皇后,每列也只能放一个皇后,那么如果把N列皇后所在的行号依次写出,那么就会是1~n的一个排列。因此就只需要枚举1~n的所有排列,查看每个排列的放置方案是否合法,统计其中合法的方案即可。总共有n!个排列。于是可以在全排列的代码基础上进行求解,由于当到达递归边原创 2020-12-23 22:03:16 · 93 阅读 · 0 评论 -
全排列(无重复数字)—— 算法笔记
从递归的角度去考虑,如果把问题描述成“输出1~n这n个整数的全排列”,那么它就可以被分为若干个子问题:“输出以1开头的全排列”…“输出以n开头的全排列”。于是不妨设定一个数组P,用来存放当前的排列;再设定一个散列数组hashTable,其中hashTable[x]当整数x已经在P中时为True。现在按顺序往P的第一位到第n位中填入数字。不妨假设当前已经填好了P[1]~P[index - 1],正准备填P[index]。显然需要枚举 1~n,如果当前枚举的数字x还没有在P[1] ~ P[index-原创 2020-12-23 21:03:34 · 384 阅读 · 0 评论 -
蓝桥杯牌型种数C++
/* 牌型种数小明被劫持到X赌城,被迫与其他3人玩牌。一副扑克牌(去掉大小王牌,共52张),均匀发给4个人,每个人13张。这时,小明脑子里突然冒出一个问题:如果不考虑花色,只考虑点数,也不考虑自己得到的牌的先后顺序,自己手里能拿到的初始牌型组合一共有多少种呢?请填写该整数,不要填写任何多余的内容或说明文字。*/#include <iostream>using namespace std;int cnt, sum; //cnt是方案数,sum为小明当前手牌数vo原创 2020-10-09 13:29:12 · 358 阅读 · 0 评论 -
C++卡片游戏
/* 蒜头君设计了一个双人游戏,在桌面上放置一排 n 张卡片,第 i 张卡片上有一个数字 a_i。 两个人轮流取走一张卡片,直至全部取完。注意每次只能取这一排卡片中的第一张或最后一张。最后取得卡片的数字和最高的玩家获胜。 蒜头君和花椰妹开始玩这个游戏。蒜头君先手,他可以使用任意策略。花椰妹计算能力有限, 所以她只单纯地使用贪心策略,即取两张卡片中数字较大的一张,如果两张卡片数字相同,则取第一张。 现在蒜头君想知道,在最佳策略下,他取得的分数会比花椰妹高多少? 例如 4 张卡片,3 2 10原创 2020-10-05 19:17:56 · 1613 阅读 · 0 评论 -
剑指offer19 正则表达式匹配 C++
请实现一个函数用来匹配包含'. '和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但与"aa.a"和"ab*a"均不匹配。示例 1:输入:s = "aa"p = "a"输出: false解释: "a" 无法匹配 "aa" 整个字符串。示例 2:输入:s = "aa"p = "a*"输出: true解释:原创 2020-08-18 19:10:00 · 122 阅读 · 0 评论 -
剑指 Offer 16. 数值的整数次方 C++
实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。 示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100示例 3:输入: 2.00000, -2输出: 0.25000解释: 2-2 = 1/22 = 1/4 = 0.25 说明:-100.0 < x < 100.0n原创 2020-08-11 22:45:15 · 227 阅读 · 0 评论 -
剑指offer13.机器人的运动范围C++
地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?*示例 1:输入:m = 2, n = 3, k = 1输出:3示例 2:输入:m = 3,原创 2020-08-04 17:46:58 · 222 阅读 · 0 评论 -
等差素数列
/*思路:先枚举首项,再枚举公差,后枚举个数。(个数就是当前这个公差能不能够枚举到10个)标题:等差素数列2,3,5,7,11,13,….是素数序列。 类似:7,37,67,97,127,157 这样完全由素数组成的等差数列,叫等差素数数列。 上边的数列公差为30,长度为6。2004年,格林与华人陶哲轩合作证明了:存在任意长度的素数等差数列。 这是数论领域一项惊人的成果!有这...原创 2020-03-31 12:24:36 · 136 阅读 · 0 评论 -
C++错误票据
试题 历届试题 错误票据 资源限制时间限制:1.0s 内存限制:256.0MB问题描述某涉密单位下发了某种票据,并要在年终全部收回。每张票据有唯一的ID号。全年所有票据的ID号是连续的,但ID的开始数码是随机选定的。因为工作人员疏忽,在录入ID号的时候发生了一处错误,造成了某个ID断号,另外一个ID重号。你的任务是通过编程,找出断号的ID和重号的ID。假设断号不可能...原创 2020-03-15 11:43:31 · 479 阅读 · 0 评论 -
C++黄金连分数
标题: 黄金连分数 黄金分割数0.61803... 是个无理数,这个常数十分重要,在许多工程问题中会出现。有时需要把这个数字求得很精确。 对于某些精密工程,常数的精度很重要。也许你听说过哈勃太空望远镜,它首次升空后就发现了一处人工加工错误, 对那样一个庞然大物,其实只是镜面加工时有比头发丝还细许多倍的一处错误而已,却使它成了“近视眼”!! 言归正传,我们如何求得黄金...原创 2020-03-13 22:14:30 · 408 阅读 · 0 评论 -
C++最长上升连续子序列
397. 最长上升连续子序列中文English给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)样例样例 1:输入:[5, 4, 2, 1, 3]输出:4解释:给定 [5, 4, 2, 1, 3],其最长上升连续子序列(LICS)为 [5, 4, 2, 1],返回 ...原创 2020-03-11 22:41:10 · 1198 阅读 · 0 评论 -
C++解码方法
512. 解码方法中文English有一个消息包含A-Z通过以下规则编码'A' -> 1'B' -> 2...'Z' -> 26现在给你一个加密过后的消息,问有几种解码的方式样例样例 1:输入: "12"输出: 2解释: 它可以被解码为 AB (1 2) 或 L (12).样例 2:输入: "10"输出: 1注意事项we can't de...原创 2020-03-10 11:30:54 · 1054 阅读 · 0 评论 -
C++房屋染色
515. 房屋染色中文English这里有n个房子在一列直线上,现在我们需要给房屋染色,分别有红色蓝色和绿色。每个房屋染不同的颜色费用也不同,你需要设计一种染色方案使得相邻的房屋颜色不同,并且费用最小,返回最小的费用。费用通过一个nx3 的矩阵给出,比如cost[0][0]表示房屋0染红色的费用,cost[1][2]表示房屋1染绿色的费用。样例样例 1:输入: [[14,2,11...原创 2020-03-10 09:53:40 · 456 阅读 · 0 评论 -
C++不同的路径2
115. 不同的路径 II中文English"不同的路径" 的跟进问题:现在考虑网格中有障碍物,那样将会有多少条不同的路径?网格中的障碍和空位置分别用 1 和 0 来表示。样例Example 1: Input: [[0]] Output: 1Example 2: Input: [[0,0,0],[0,1,0],[0,0,0]] Output: 2 Expla...原创 2020-03-08 20:20:49 · 270 阅读 · 0 评论 -
C++跳跃游戏(青蛙跳)
116. 跳跃游戏中文English给出一个非负整数数组,你最初定位在数组的第一个位置。 数组中的每个元素代表你在那个位置可以跳跃的最大长度。 判断你是否能到达数组的最后一个位置。样例样例 1输入 : [2,3,1,1,4]输出 : true样例 2输入 : [3,2,1,0,4]输出 : false注意事项这个问题有两个方法,一个是贪心和 动态规划。...原创 2020-03-05 21:57:01 · 2041 阅读 · 1 评论 -
C++机器人的不同路径
114. 不同的路径中文English有一个机器人的位于一个 m × n 个网格左上角。机器人每一时刻只能向下或者向右移动一步。机器人试图达到网格的右下角。问有多少条不同的路径?样例Example 1:Input: n = 1, m = 3Output: 1 Explanation: Only one path to target position.Example 2:...原创 2020-03-05 21:03:09 · 504 阅读 · 0 评论 -
C++换硬币动态规划
669. 换硬币中文English给出不同面额的硬币以及一个总金额. 写一个方法来计算给出的总金额可以换取的最少的硬币数量. 如果已有硬币的任意组合均无法与总金额面额相等, 那么返回 -1.样例样例1输入:[1, 2, 5]11输出: 3解释: 11 = 5 + 5 + 1样例2输入: [2]3输出: -1注意事项你可以假设每种硬币均有无数个class Sol...原创 2020-03-05 20:20:38 · 978 阅读 · 0 评论 -
C++最大公约数和最小公倍数
#include <iostream>using namespace std;/*最小公倍数=两数的乘积/最大公约(因)数辗转相除法用较大数除以较小数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。*/long long gcd(long lo...原创 2020-03-01 21:25:16 · 695 阅读 · 0 评论 -
C++蘑菇森林
#include <iostream>#include <algorithm>using namespace std;//不能忽略血量相同的情况int ans[5005];int main(){ int n , m , h , b; cin >> n >> m >> h >> b; //...原创 2020-02-24 21:06:46 · 429 阅读 · 0 评论 -
C++多项式相乘
#include <iostream>using namespace std;int a[2][2]; //二维数组开的秒int b[2][2];int ans[25]; //用来存放系数,那么存放后所对应的下标就是指数int main(){ for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ ...原创 2020-02-23 16:28:26 · 3126 阅读 · 0 评论 -
C++区间和例题
蒜头君的越野比赛//这种题属于区间和问题,前缀和,后缀和等#include <iostream>using namespace std;int d[100005]; //把距离读到d里面long long sum[100005];//表示前缀和int main(){ int n , k; //n个任务点,起点也算任务点所以最少两个任务点,起点和终点...原创 2020-02-23 15:52:03 · 862 阅读 · 0 评论 -
C++最大子矩阵和暴力题解
问题描述:求一个M*N的矩阵的最大子矩阵和。比如在如下这个矩阵中:0 -2 -7 09 2 -6 2-4 1 -4 1-1 8 0 -2拥有最大和的子矩阵为:9 2-4 1-1 8其和为15。#include <iostream>using namespace std;int A[55][55];int main(){ int n,m,ans; ...原创 2020-02-17 17:55:00 · 917 阅读 · 0 评论 -
C++ 1的个数简单解法
问题描述输入正整数n,判断从1到n之中,数字1一共要出现几次。例如1123这个数,则出现了两次1。例如15,那么从1到15之中,一共出现了8个1。输入格式一个正整数n输出格式一个整数,表示1出现的资料样例输入15样例输出8数据规模和约定n不超过30000#include <iostream>using namespace std;int ma...原创 2020-02-16 19:59:39 · 5443 阅读 · 0 评论 -
C++打印锯齿矩阵
#include <iostream>#include <vector>using namespace std;vector<int> mat[10005]; //相当于数组里面装的是一个个vector int main(){ int n,m,x,y; // n>=1 m<=10000 1<=x<=n 0<=y&l...原创 2020-02-16 16:23:03 · 369 阅读 · 0 评论