算法/数据结构
了解和使用算法与数据结构,有时加以实例来实现
剑小麟
软件工程专业,热衷于后端语言与算法,目前主要更新数据结构与算法、java、C++、数据库以及计算机组成原理等内容
展开
-
简单背包问题
有一个背包能装的重量 maxw (正整数,0≤maxw≤200000),同时有 n 件物品(1≤n≤100),每件物品有一个重量 wi (正整数)和一个价值 pi (正整数)。要求从这 n 件物品中任取若干件装入背包内,使背包的物品价值最大。第 1 行:背包最大载重 maxw,物品总数 n;第 2 行到第 n+1行:每个物品的重量和价值;一个数字即背包内物品最大价值;原创 2023-03-18 20:44:01 · 301 阅读 · 1 评论 -
试题:出行计划
(题目源于第25次CCF计算机软件能力认证)最近西西艾弗岛上出入各个场所都要持有一定时限内的核酸检测阴性证明。具体来时,如果在 t时刻做了核酸检测,则经过一段时间后可以得到核酸检测阴性证明。这里我们假定等待核酸检测结果需要 k个单位时间,即在 t+k时刻可以获得结果。如果一个场所要求持 24个单位时间内核酸检测结果入内,那么凭上述的核酸检测结果,可以在第 t+k 时刻到第 t+k+23时刻进入该场所。原创 2023-01-16 21:46:09 · 448 阅读 · 0 评论 -
递归实现排列型枚举
把 1∼n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。输入格式一个整数 n。输出格式按照从小到大的顺序输出所有方案,每行 1 个。首先,同一行相邻两个数用一个空格隔开。其次,对于两个不同的行,对应下标的数一一比较,字典序较小的排在前面。数据范围1≤n≤93。原创 2022-10-31 22:33:36 · 181 阅读 · 0 评论 -
递归实现指数型枚举
从 1∼n 这 n 个整数中随机选取任意多个,输出所有可能的选择方案。输入格式输入一个整数 n。输出格式每行输出一种方案。同一行内的数必须升序排列,相邻两个数用恰好 1 个空格隔开。对于没有选任何数的方案,输出空行。数据范围1≤n≤153注:输出第一行为空集。原创 2022-10-31 16:53:35 · 122 阅读 · 0 评论 -
力扣 试题:最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。原创 2022-10-24 08:45:15 · 151 阅读 · 0 评论 -
力扣 试题:交替合并字符串
给你两个字符串 word1 和 word2。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回 合并后的字符串。原创 2022-10-24 08:34:52 · 163 阅读 · 0 评论 -
力扣试题:最大子数组和
给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。原创 2022-10-11 08:49:39 · 142 阅读 · 0 评论 -
力扣试题:最大升序子树的和
给你一个正整数组成的数组 nums ,返回 nums 中一个 升序 子数组的最大可能元素和。子数组是数组中的一个连续数字序列。已知子数组 [numsl, numsl+1, ..., numsr-1, numsr] ,若对所有 i(l原创 2022-10-08 10:34:33 · 104 阅读 · 0 评论 -
力扣试题:移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。为什么返回数值是整数,但输出的答案是数组呢?请注意,输入数组是以方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。你可以想象内部操作如下:// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝。原创 2022-10-01 21:25:53 · 97 阅读 · 0 评论 -
力扣试题:删除有序数组中的重复项
给你一个 升序排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致。由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分。更规范地说,如果在删除重复项之后有 k 个元素,那么 nums 的前 k 个元素应该保存最终结果。将最终结果插入 nums 的前 k 个位置后返回 k。不要使用额外的空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。原创 2022-09-29 22:05:43 · 170 阅读 · 0 评论 -
力扣试题:最长公共前缀 解法
编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。原创 2022-09-28 22:56:31 · 190 阅读 · 0 评论 -
力扣试题:罗马数字转整数 解法
罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II。27 写做 XXVII, 即为 XX + V + II。通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为 IX。原创 2022-09-28 22:50:53 · 177 阅读 · 0 评论 -
洛谷试题: 采药 解法
题目描述辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师。为此,他想拜附近最有威望的医师为师。医师为了判断他的资质,给他出了一个难题。医师把他带到一个到处都是草药的山洞里对他说:“孩子,这个山洞里有一些不同的草药,采每一株都需要一些时间,每一株也有它自身的价值。我会给你一段时间,在这段时间里,你可以采到一些草药。如果你是一个聪明的孩子,你应该可以让采到的草药的总价值最大。”如果你是辰辰,你能完成这个任务吗?输入格式第一行有 22 个整数 T(1≤T≤1000)和 M(1≤M≤100)原创 2022-04-06 11:30:54 · 244 阅读 · 0 评论 -
贪心算法实例
题目描述:小 B 同学想去吃自助餐,但是他是那种比较节俭的的人,既不想浪费食物,又想尽可能吃的贵一点,他于是私下里做了调查。 小蓝餐厅的自助餐有 n 种食材,每种食材都有它的价格。 而且也能估计出每一份的重量,所以他列了一个表格。 红烧牛肉 30元 300g 油闷大虾 8元 5g 四喜丸子 4元 8g 三文鱼 5元 3g 排骨 18元 200g 麻辣兔头 20元 120g 高汤海参 40元 70g 扇贝粉丝 8元 32g 牛排 79元 240g ... 现在小 B 想知道在他到底最多吃多少钱的菜品。 假原创 2022-04-05 22:01:50 · 775 阅读 · 0 评论 -
洛谷试题:栈
题目背景栈是计算机中经典的数据结构,简单的说,栈就是限制在一端进行插入删除操作的线性表。栈有两种最重要的操作,即 pop(从栈顶弹出一个元素)和 push(将一个元素进栈)。栈的重要性不言自明,任何一门数据结构的课程都会介绍栈。宁宁同学在复习栈的基本概念时,想到了一个书上没有讲过的问题,而他自己无法给出答案,所以需要你的帮忙。题目描述宁宁考虑的是这样一个问题:一个操作数序列,1,2…,n(图示为 1 到 3 的情况),栈 A 的深度大于 n。现在可以进行两种操作,将一个数,从原创 2022-04-05 10:05:15 · 161 阅读 · 0 评论 -
洛谷试题:拼数 解法
题目描述设有 n 个正整数 a1...a2…an,将它们联接成一排,相邻数字首尾相接,组成一个最大的整数。输入格式第一行有一个整数,表示数字个数 n。第二行有 nn个整数,表示给出的 nn个整数ai。输出格式一个正整数,表示最大的整数输入:313 312 343输出:34331213使用字符串排序的方法进行排序,代码如下:#include<bits/stdc++.h>using namespace std;string s[10010原创 2022-04-01 14:58:49 · 741 阅读 · 0 评论 -
洛谷试题:车站 解法
题目描述火车从始发站(称为第 11 站)开出,在始发站上车的人数为 aa,然后到达第 22 站,在第 22 站有人上、下车,但上、下车的人数相同,因此在第 22 站开出时(即在到达第 33 站之前)车上的人数保持为 aa 人。从第 33 站起(包括第 33 站)上、下车的人数有一定规律:上车的人数都是前两站上车人数之和,而下车人数等于上一站上车人数,一直到终点站的前一站(第 (n-1)(n−1) 站),都满足此规律。现给出的条件是:共有 nn 个车站,始发站上车的人数为 aa ,最后一站下车的人数是 m原创 2022-04-01 12:50:20 · 930 阅读 · 0 评论 -
洛谷试题:过河卒 解法
题目描述棋盘上 AA 点有一个过河卒,需要走到目标 BB 点。卒行走的规则:可以向下、或者向右。同时在棋盘上 CC 点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,AA 点 (0, 0)(0,0)、BB 点 (n, m)(n,m),同样马的位置坐标是需要给出的。现在要求你计算出卒从 AA 点能够到达 BB 点的路径的条数,假设马的位置是固定不动的,并不是卒走一步马走一步。输入格式一行四个正整数,分别表示 BB 点坐标和原创 2022-03-31 13:17:01 · 396 阅读 · 0 评论 -
洛谷试题: 硬币翻转 解法
题目描述在桌面上有一排硬币,共N枚,每一枚硬币均为正面朝上。现在要把所有的硬币翻转成反面朝上,规则是每次可翻转任意N-1枚硬币(正面向上的被翻转为反面向上,反之亦然)。求一个最短的操作序列(将每次翻转N-1枚硬币成为一次操作)。输入格式一个自然数N(N为不大于100的偶数)。输出格式第一行包含一个整数S,表示最少需要的操作次数。接下来的SS行每行分别表示每次操作后桌上硬币的状态(一行包含N个整数(0或1),表示每个硬币的状态:0――正面向上,和1――反面向上,不允许出现多余空格)。对原创 2022-03-29 16:17:32 · 848 阅读 · 0 评论 -
洛谷试题:车厢重组 解法
题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转180度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他退休后,火车站决定将这一工作自动化,其中一项重要的工作是编一个程序,输入初始的车厢顺序,计算最少用多少步就能将车厢排序。输入格式共两行。第一行是车厢总数N( ≤10000)。第二行是NN个不同的数表示初始的车厢顺序。输出格式原创 2022-03-29 11:48:00 · 354 阅读 · 0 评论 -
洛谷试题: 明明的随机数 解法
题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了NN个11到10001000之间的随机整数(N≤100)(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。输入格式输入有两行,第1行为1个正整数,表示所生成的随机数的个数N第2行有N个用空格隔开的正整数,为所产生的随机数。输出格式输出也是两行,第1行原创 2022-03-28 19:47:25 · 1061 阅读 · 0 评论 -
洛谷试题:校门外的树 解法
题目描述某校大门外长度为ll的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在l的位置;数轴上的每个整数点,即0,1,2..l都种有一棵树。由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。输入格式第一行有两个...原创 2022-03-27 20:31:12 · 5911 阅读 · 0 评论 -
C++中STL容器的主要使用及含义
1.stack栈容器的使用假如栈中存放的是字符串,我们做如下定义:stack<string> ss; //设该变量名为ss其主要用法如下:ss.push(a);//存入栈中元素ass.top();//读取栈顶元素ss.pop();//弹出栈顶元素ss.size();//表示栈中元素的数目ss.empty();//判断栈是否为空stack在使用前一定要加入头文件#include <stack>2.vector可变数组的使用vector原创 2022-03-26 23:12:42 · 1457 阅读 · 0 评论 -
排序之选择排序
实现思路:利用循环的方式将数组中的最小的数字依次放到最前面。例如:613循环一次:163循环两次:136代码实现:#include<bits/stdc++.h>using namespace std;void px(int a[],int len){ for(int i=0;i<len;i++){ int k=i; for(int j=i+1;j<len;j++){ if(a[j]<a[k]) k=j; } if(k!=原创 2022-03-16 18:48:51 · 88 阅读 · 0 评论 -
蓝桥杯试题:冰雹数(C/C++)
问题描述:任意给定一个正整数N,如果是偶数,执行: N / 2如果是奇数,执行: N * 3 + 1生成的新的数字再执行同样的动作,循环往复。通过观察发现,这个数字会一会儿上升到很高,一会儿又降落下来。就这样起起落落的,但最终必会落到“1”这有点像小冰雹粒子在冰雹云中翻滚增长的样子。比如N=99,28,14,7,22,11,34,17,52,26,13,40,20,10,5,16,8,4,2,1可以看到,N=9的时候,这个“小冰雹”最高冲到了52这个高度。样例输入:10原创 2022-03-12 15:36:43 · 947 阅读 · 1 评论 -
蓝桥杯试题:寒假作业(C/C++)
问题描述:现在小学的数学题目也不是那么好玩的。看看这个寒假作业: □ + □ = □ □ - □ = □ □ × □ = □ □ ÷ □ = □每个方块代表1~13中的某一个数字,但不能重复。比如:6 + 7 = 139 - 8 = 13 * 4 = 1210 / 2 = 5以及:7 + 6 = 139 - 8 = 13 * 4 = 1210 / 2 = 5就算两种解法。(加法,乘法交换律后算不同的方案)你一共...原创 2022-03-12 12:16:51 · 1218 阅读 · 0 评论 -
蓝桥杯试题:凑算式(C/C++)
问题描述:这个算式中A~I代表1-9的数字,不同的字母代表不同的数字。比如:6+8/3+952/714 就是一种解法,5+3/1+972/486 是另一种解法。这个算式一共有多少种解法?注意:你提交应该是个整数,不要填写任何多余的内容或说明性文字问题分析:可以使用全排列的方法进行填空,直到找出符合条件的等式为止。#include<bits/stdc++.h>using namespace std;int p[]={1,2,3,4,5,6,7,8,9};原创 2022-03-10 11:37:52 · 1366 阅读 · 0 评论 -
蓝桥杯试题:饮料换购(C/C++)
问题描述:乐羊羊饮料厂正在举办一次促销优惠活动。乐羊羊C型饮料,凭3个瓶盖可以再换一瓶C型饮料,并且可以一直循环下去(但不允许暂借或赊账)。请你计算一下,如果小明不浪费瓶盖,尽量地参加活动,那么,对于他初始买入的n瓶饮料,最后他一共能喝到多少瓶饮料。样例输入:100样例输出:149问题分析:模拟问题,每减少三个时增加一个,相当于每次减少两个。代码示例如下:#include<bits/stdc++.h>using namespace std;int n,an原创 2022-03-08 10:04:44 · 1352 阅读 · 0 评论 -
蓝桥杯试题:加法变乘法(C/C++)
试题描述:我们都知道:1+2+3+ ... + 49 = 1225现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015比如:1+2+3+...+10*11+12+...+27*28+29+...+49 = 2015就是符合要求的答案。请你寻找另外一个可能的答案,并把位置靠前的那个乘号左边的数字提交(对于示例,就是提交10)。试题分析:可以将加号变成乘号后两数相乘减去两数相加,得到的对应差值来辅助计算。同时i<j,代码如下:#include<bits/原创 2022-03-07 20:47:31 · 285 阅读 · 0 评论 -
蓝桥杯试题:奇妙的数字(C/C++)
试题描述:小明发现了一个奇妙的数字。它的平方和立方正好把0~9的10个数字每个用且只用了一次。你能猜出这个数字是多少吗?试题分析:将该数字的平方与立方转换为字符串之后连接到一起,然后与0123456789的字符串进行比较。代码示例如下:#include<bits/stdc++.h>using namespace std;char a[10],b[10];char c[]="0123456789";long long p,q;int main(){ ...原创 2022-03-07 17:26:44 · 1099 阅读 · 0 评论 -
蓝桥杯试题:分糖果(C/C++)
问题描述:有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏:每个小朋友都把自己的糖果分一半给左手边的孩子。一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。输入格式 程序首先读入一个整数N(2<N<1000)接着是一行用空格分开的N个偶数...原创 2022-03-04 13:38:52 · 2165 阅读 · 0 评论 -
蓝桥杯试题:神奇算式(C/C++)
问题描述:由4个不同的数字,组成的一个乘法算式,它们的乘积仍然由这4个数字组成。比如:210 x 6 = 12608 x 473 = 378427 x 81 = 2187都符合要求。如果满足乘法交换律的算式算作同一种情况,那么,包含上边已列出的3种情况,一共有多少种满足要求的算式。请填写该数字,通过浏览器提交答案,不要填写多余内容。问题分析:可以使用枚举的方法进行三位数以...原创 2022-03-03 19:27:03 · 817 阅读 · 0 评论 -
蓝桥杯试题:剪格子(C/C++)
试题描述:如下图所示,3 x 3 的格子中填写了一些整数。我们沿着图中的星号线剪开,得到两个部分,每个部分的数字和都是60。本题的要求就是请你编程判定:对给定的m x n 的格子中的整数,是否可以分割为两个部分,使得这两个区域的数字和相等。如果存在多种解答,请输出包含左上角格子的那个区域包含的格子的最小数目。如果无法分割,则输出 0。输入格式程序先读入两个整数 m n 用空格分割 (m,n<10)。表示表格的宽度和高度...原创 2022-03-02 16:24:42 · 572 阅读 · 0 评论 -
蓝桥杯试题:核桃的数量(C/C++)
问题描述:小张是软件项目经理,他带领3个开发组。工期紧,今天都在加班呢。为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑)。他的要求是:1. 各组的核桃数量必须相同2. 各组内必须能平分核桃(当然是不能打碎的)3. 尽量提供满足1,2条件的最小数量(节约闹革命嘛)输入格式输入包含三个正整数a, b, c,表示每个组正在加班的人数,用空格分开(a,b,c<30)输出格式输出一个正整数,表示每袋核桃的数量。用户输入12 4 5输出20...原创 2022-03-01 17:13:51 · 564 阅读 · 0 评论 -
蓝桥杯试题:幻方填空(C/C++)
题目介绍:幻方是把一些数字填写在方阵中,使得行、列、两条对角线的数字之和都相等。欧洲最著名的幻方是德国数学家、画家迪勒创作的版画《忧郁》中给出的一个4阶幻方。他把1,2,3,...16 这16个数字填写在4 x 4的方格中。表中有些数字已经显露出来,还有些用?和*代替。请你计算出? 和 * 所代表的数字。并把 * 所代表的数字作为本题答案提交。答案是一个整数,请通过浏览器直接提交该数字。注意:不要提交解答过程,或其它辅助说明类的内容。思路:使用vector图存储图原创 2022-02-28 19:23:03 · 359 阅读 · 0 评论 -
蓝桥杯试题:振兴中华(C/C++)
题目描述:小明参加了学校的趣味运动会,其中的一个项目是:跳格子。地上画着一些格子,每个格子里写一个字,如下所示:从我做起振我做起振兴做起振兴中起振兴中华 比赛时,先站在左上角的写着“从”字的格子里,可以横向或纵向跳到相邻的格子里,但不能跳到对角的格子或其它位置。一直要跳到“华”字结束。 要求跳过的路线刚好构成“从我做起振兴中华”这句话。 请你帮助小明算一算他一共有多少种可能的跳跃路线呢?思路:以“从”字为起点,到“华”字为终点。在每个坐标处...原创 2022-02-27 14:25:43 · 866 阅读 · 0 评论 -
蓝桥杯试题:马虎的算式(C/C++)
题目【填空】小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。有一次,老师出的题目是:36 x 495 = ?他却给抄成了:396 x 45 = ?但结果却很戏剧性,他的答案竟然是对的!!因为 36 * 495 = 396 * 45 = 17820类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0)能满足形如: ab * cde = adb * ce 这样的算式一共有多少原创 2022-02-27 12:45:43 · 632 阅读 · 0 评论 -
蓝桥杯试题:猜年龄(C/C++)
题目描述【填空】:美国数学家维纳(N.Wiener)智力早熟,11岁就上了大学。他曾在1935~1936年应邀来中国清华大学讲学。一次,他参加某个重要会议,年轻的脸孔引人注目。于是有人询问他的年龄,他回答说:“我年龄的立方是个4位数。我年龄的4次方是个6位数。这10个数字正好包含了从0到9这10个数字,每个都恰好出现1次。”请你推算一下,他当时到底有多年轻。解体思路:我们可以通过枚举的方法将符合条件的年龄罗列出来,如下:#include <bits/stdc++.h>原创 2022-02-27 11:53:02 · 636 阅读 · 0 评论 -
蓝桥杯试题:成绩统计
题目描述小蓝给学生们组织了一场考试,卷面总分为 100 分,每个学生的得分都是一个 0 到 100 的整数。如果得分至少是 60 分,则称为及格。如果得分至少为 85 分,则称为优秀。请计算及格率和优秀率,用百分数表示,百分号前的部分四舍五入保留整 数。输入描述输入的第一行包含一个整数表示考试人数接下来 n 行,每行包含一个 0 至 100 的整数,表示一个学生的得分输出描述输出两行,每行一个百分数,分别表示及格率和优秀率。百分号前的部分 四舍五入保留整数#inc原创 2022-02-26 22:10:50 · 328 阅读 · 0 评论