
数据结构与算法
文章平均质量分 58
本专题涵盖数据结构、算法设计与分析课程的基础编程题,基于C语言。题目选自Online Judge平台,参考程序代码均已提交通过。
jialChen
专业:计算机科学与技术。研究方向:计算机软件与理论。计算机技术与软件专业技术高级资格(系统架构设计师)。
展开
-
数据结构与算法39-计算器的改良
数据结构与算法,洛谷P1022 [NOIP2000 普及组],题解,python语言原创 2022-12-07 21:27:59 · 643 阅读 · 1 评论 -
数据结构与算法38-鸭棋
洛谷P5380 [THUPC2019]鸭棋题解,python语言实现,含测试用例原创 2022-10-18 11:16:51 · 1131 阅读 · 0 评论 -
数据结构与算法37-堆石子
Description在一片沙滩上摆放着n堆石子。 现要将石子有次序地合并成一堆。 每次任选2堆石子合并成新的一堆,合并的费用为新的一堆石子数。试设计一个算法,计算出将n堆石子合并成一堆的最小总费用。Input输入数据第1行有1个正整数 n(1≤n≤100000),表示有 n堆石子,每次选2堆石子合并。第2行有 n个整数, 分别表示每堆石子的个数(每堆石子的取值范围为[1,1000]) 。Output数据输出为一行, 表示对应输入的最小总费用。Sample Input745 13 12 1原创 2021-11-25 18:06:57 · 893 阅读 · 0 评论 -
数据结构与算法36-联接最大数
Description设有n个正整数(n≤20),将它们联接成一排,组成一个最大的多位整数。 例如:n=3时,3个整数13,312,343联接成的最大整数为:34331213 又如:n=4时,4个整数7,13,4,246联接成的最大整数为:7424613Input每个测试文件只包含一组测试数据,每组输入数据的第一行输入一个正整数n(n≤20)。 接下来一行输入n个正整数。Output对于每组输入数据,输出n个正整数联接成的最大的多位整数。Sample Input3 13 312 343S原创 2021-11-23 11:59:45 · 1195 阅读 · 0 评论 -
数据结构与算法35-孪生素数对
Description如果n和n+2都是素数,我们称其为孪生素数,比如3和5,5和7都是孪生素数。 给你一个区间[a,b],请问此区间有多少对孪生素数?(计数规则:n和n+2都是素数,且n,n+2都在区间[a,b]内)Input第一行是一个整数K(K≤ 10000),表示样例的个数。 以后每行一个样例,为两个整数,a和b,1≤a≤b≤5000000。Output每行输出一个样例的结果。Sample Input61 34 71 101 1001 10001 5000000Sam原创 2021-11-21 23:05:23 · 2477 阅读 · 2 评论 -
数据结构与算法34-滑雪
DescriptionPIPI喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。PIPI想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子1 2 3 4 516 17 18 19 615 24 25 20 714 23 22 21 813 12 11 10 9一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行原创 2021-11-17 21:29:58 · 355 阅读 · 0 评论 -
数据结构与算法33-PIPI捡垃圾
DescriptionPIPI参加志愿者活动去沙滩上捡垃圾,已知沙滩上有 N 堆垃圾,每个垃圾的重量为 L,PIPI的垃圾袋容量为 M,一个垃圾袋最多能装两个垃圾。问: PIPI最少需要多少个垃圾袋才能把垃圾全带走?Input第一行包含一个正整数T代表测试样例组数。对于每组测试用例,第一行包含两个正整数 N和 M(N<=105,M<=109)。第二行包含 N 个正整数代表每一个垃圾的重量L。Output对于每组样例,输出包含一个正整数代表最少需要的垃圾袋数目。除了最后一组样例,每两原创 2021-11-10 10:54:07 · 1085 阅读 · 0 评论 -
数据结构与算法32-回文数
Description与回文串的定义一样,回文数是指一个数从第一位到最后一位读和从最后一位到第一位读是一样的。例如:121、22、2 是回文数而 312 不是。给定一个数,你的任务是找到大于这个数的第一个回文数。Input输入包含多组测试数据,每组数据只有一个数字 N, N 不超过 10000 位且不含前导零。Output对于每组测试数据,输出只有一行,为大于 N 的第一个回文数Sample Input2312Sample Output3313参考程序#include &l原创 2021-10-12 10:43:07 · 528 阅读 · 0 评论 -
数据结构与算法31-顺序表的删除
Description已知A,B和C为三个非递减有序的线性表,现要求对A表作如下操作:删去那些既在B表中出现又在C表中出现的元素。试对顺序表编写实现上述操作的算法。Input第一行输入3个正整数m,n,p(m,n,p<=100),用空格分开,分别表示三个线性表中的元素个数,其后3行依次输入A,B,C表中的元素。Output输出实现上述操作后的A表。Sample Input8 5 61 2 3 4 5 6 6 72 3 5 9 122 4 5 6 12 13Sample Out原创 2021-05-15 14:32:33 · 1192 阅读 · 0 评论 -
数据结构与算法30-波动数列
Description观察这个数列:1 3 0 2 -1 1 -2 …这个数列中后一项总是比前一项增加2或者减少3。栋栋对这种数列很好奇,他想知道长度为 n 和为 s 而且后一项总是比前一项增加a或者减少b的整数数列可能有多少种呢?Input输入的第一行包含四个整数 n s a b,含义如前面说述。Output输出一行,包含一个整数,表示满足条件的方案数。由于这个数很大,请输出方案数除以100000007的余数。Sample Input4 10 2 3Sample Output原创 2021-04-16 22:53:26 · 549 阅读 · 0 评论 -
数据结构与算法29-滑动窗口
Description给一个长度为 N 的数组,一个长为 K 的滑动窗体从最左端移至最右端,你只能看到窗口中的 K 个数,每次窗体向右移动一位,如下图:你的任务是找出窗体在各个位置时的最大值和最小值。InputOutput第一行为滑动窗口从左向右移动到每个位置时的最小值,每个数之间用一个空格分开;第二行为滑动窗口从左向右移动到每个位置时的最大值,每个数之间用一个空格分开。Sample Input8 31 3 -1 -3 5 3 6 7Sample Output-1 -3 -3原创 2021-04-10 19:52:07 · 613 阅读 · 0 评论 -
数据结构与算法28-玩转二叉树
Description给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列。所谓镜面反转,是指将所有非叶结点的左右孩子对换。这里假设键值都是互不相等的正整数。Input输入第一行给出一个正整数N(≤30),是二叉树中结点的个数。第二行给出其中序遍历序列。第三行给出其前序遍历序列。数字间以空格分隔。Output在一行中输出该树反转后的层序遍历的序列。数字间以1个空格分隔,行首尾不得有多余空格。Sample Input71 2 3 4 5 6 74 1 3原创 2021-03-30 15:32:57 · 1282 阅读 · 0 评论 -
数据结构与算法-27基于链式存储结构的图书信息表的逆序存储
Description定义一个包含图书信息(书号、书名、价格)的链表,读入相应的图书数据来完成图书信息表的创建,然后将读入的图书逆序存储,逐行输出逆序存储后每本图书的信息。Input输入n+1行,第一行是图书数目n,后n行是n本图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空格分隔,价格之后没有空格。其中书号和书名为字符串类型,价格为浮点数类型。Output总计n行,第i行是原有图书表中第n-i+1行的图书的信息(书号、书名、价格),每本图书信息占一行,书号、书名、价格用空原创 2021-03-26 10:22:06 · 645 阅读 · 0 评论 -
数据结构与算法-26完全二叉树的层序遍历
Description一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是完美二叉树。对于深度为 D 的,有 N 个结点的二叉树,若其结点对应于相同深度完美二叉树的层序遍历的前 N 个结点,这样的树就是完全二叉树。给定一棵完全二叉树的后序遍历,请你给出这棵树的层序遍历结果。Input输入在第一行中给出正整数 N(≤30),即树中结点个数。第二行给出后序遍历序列,为 N 个不超过 100 的正整数。同一行中所有数字都以空格分隔。Output在一行中输出该树的层序遍历序列。所有数字都以 1原创 2021-03-23 12:25:07 · 1865 阅读 · 1 评论 -
数据结构与算法-25活动选择问题
Description大学生艺术中心每天都有n个活动申请举办,但是为了举办更多的活动,必须要放弃一些活动,求出每天最多能举办多少活动。Input输入第一行为申请的活动数n(n<100),从第2行到n+1行,每行两个数,是每个活动的开始时间b,结束时间e;Output输出每天最多能举办的活动数。Sample Input1215 2015 198 1810 154 146 125 102 93 80 73 41 3Sample Output5参考程序(P原创 2021-03-15 21:23:04 · 240 阅读 · 0 评论 -
数据结构与算法-24最长上升子序列
DescriptionInput输入的第一行是序列的长度N (1 <= N <= 1000)。第二行给出序列中的N个整数,这些整数的取值范围都在0到10000。Output最长上升子序列的长度。Sample Input71 7 3 5 9 4 8Sample Output4参考程序#include <stdio.h>#include <string.h>#define LEN 1000int max(int a,int b){ r原创 2021-03-15 20:57:06 · 267 阅读 · 0 评论 -
数据结构与算法-23确定比赛名次
Description有N个比赛队(1<=N<=500),编号依次为1,2,3,……,N进行比赛,比赛结束后,裁判委员会要将所有参赛队伍从前往后依次排名,但现在裁判委员会不能直接获得每个队的比赛成绩,只知道每场比赛的结果,即P1赢P2,用P1,P2表示,排名时P1在P2之前。现在请你编程序确定排名。Input输入有若干组,每组中的第一行为二个数N(1<=N<=500),M;其中N表示队伍的个数,M表示接着有M行的输入数据。接下来的M行数据中,每行也有两个整数P1,P2表示即P1原创 2021-03-03 12:55:49 · 721 阅读 · 1 评论 -
数据结构与算法-22反转链表
Description给定一个常数 K 以及一个单链表 L,请编写程序将 L 中每 K 个结点反转。例如:给定 L 为 1→2→3→4→5→6,K 为 3,则输出应该为 3→2→1→6→5→4;如果 K 为 4,则输出应该为 4→3→2→1→5→6,即最后不到 K 个元素不反转。Input每个输入包含 1 个测试用例。每个测试用例第 1 行给出第 1 个结点的地址、结点总个数正整数 N (≤10 5 )、以及正整数 K (≤N),即要求反转的子链结点的个数。结点的地址是 5 位非负整数,NUL原创 2020-09-23 14:58:17 · 484 阅读 · 0 评论 -
数据结构与算法-21子集和问题
Description子集和问题的一个实例为〈S,t〉。其中,S={ x1 , x2 ,…,xn }是一个正整数的集合,c是一个正整数。子集和问题判定是否存在S的一个子集S1,使得:试设计一个解子集和问题的回溯法。 对于给定的正整数的集合S={ x1 , x2 ,…,xn }和正整数c,计算S 的一个子集S1,使得:Input输入数据的第1 行有2 个正整数n 和c(n≤10000,c≤10000000),n 表示S 的大小,c是子集和的目标值。接下来的1 行中,有n个正整数,表示集合S中的元素原创 2020-06-01 15:18:15 · 1679 阅读 · 0 评论 -
数据结构与算法-20数字三角形问题
Description给定一个由n行数字组成的数字三角形如下图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。对于给定的由n行数字组成的数字三角形,计算从三角形的顶至底的路径经过的数字和的最大值。Input输入数据的第1行是数字三角形的行数n,1≤n≤100。接下来n行是数字三角形各行中的数字。所有数字在0…99之间。Output输出数据只有一个整...原创 2020-04-08 12:34:31 · 980 阅读 · 0 评论 -
数据结构与算法-19交叉排序
Description输入N个数,把所有奇数位置上的数从小到大排序,把偶数位置上的数从大到小排序。Input输入的第一行是一个正整数N(2<=N<=100)。 第二行是N个用空格隔开的整数。Output输出只有一行N个数,是按要求排序后的序列,用空格隔开。Sample Input61 2 3 4 5 6Sample Output1 6 3 4 5 2参考程序#i...原创 2020-03-20 18:30:28 · 537 阅读 · 0 评论 -
数据结构与算法-18归并求逆序数
Description对于数列a1,a2,a3…中的任意两个数ai,aj (i < j),如果ai > aj,那么我们就说这两个数构成了一个逆序对;在一个数列中逆序对的总数称之为逆序数,如数列 1 6 3 7 2 4 9中,(6,4)是一个逆序对,同样还有(3,2),(7,4),(6,2),(6,3)等等,你的任务是对给定的数列求出数列的逆序数。Input输入数据N(N <...原创 2020-03-18 16:07:31 · 312 阅读 · 0 评论 -
数据结构与算法-17第k小的数
Description现有一个包含n个整数(1<=n<=900000)的无序序列(保证序列内元素各不相同),输入一个整数k(1<=k<=n),请用较快的方式找出该序列的第k小数并输出。Input多组输入。首先输入一个数据组数T(1<=T<=100) 接下来是T组数据。 每组数据有两行。 第一行先输入两个整数,n和k。 接下来是一行输入n个由空格分开...原创 2020-02-27 21:19:13 · 709 阅读 · 0 评论 -
数据结构与算法-16无向图深度遍历(邻接矩阵、邻接表)
Description请定一个无向图,顶点编号从0到n-1,用深度优先搜索(DFS),遍历并输出。遍历时,先遍历节点编号小的。Input输入第一行为整数n(0 < n < 100),表示数据的组数。 对于每组数据,第一行是两个整数k,m(0 < k < 100,0 < m < k*k),表示有m条边,k个顶点。 下面的m行,每行是空格隔开的两个整数u,v,表示一条连接u,v顶点的...原创 2020-02-03 13:35:55 · 1451 阅读 · 0 评论 -
数据结构与算法-15无向图广度遍历(邻接矩阵、邻接表)
Description给定一个无向连通图,顶点编号从0到n-1,用广度优先搜索(BFS)遍历,输出从某个顶点出发的遍历序列。(同一个结点的同层邻接点,节点编号小的优先遍历)。Input输入第一行为整数n(0< n <100),表示数据的组数。 对于每组数据,第一行是三个整数k,m,t(0<k<100,0<m<(k-1)*k/2,0< t<k),表示有m条边,k个顶点,t为遍历的起...原创 2020-02-02 20:57:27 · 1083 阅读 · 0 评论 -
数据结构与算法-14母牛的故事
Description有一对夫妇买了一头母牛,它从第2年起每年年初生一头小母牛。每头小母牛从第四个年头开始,每年年初也生一头小母牛。请编程实现在第n年的时候,共有多少头母牛?Input输入数据由多个测试实例组成,每个测试实例占一行,包括一个整数n(0< n< 55),n的含义如题目中描述。 n=0表示输入数据的结束,不做处理。Output对于每个测试实例,输出在第n年的时候母...原创 2020-02-01 20:12:26 · 517 阅读 · 0 评论 -
数据结构与算法-13骨牌铺方格三例(递推)
【例1】Description在2×n的一个长方形方格中,用一个1×2的骨牌铺满方格,输入n ,输出铺放方案的总数. 例如n=3时,为2×3方格,骨牌的铺放方案有三种,如下图:Input输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0< n<=50)。Output对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。Samp...原创 2020-01-31 23:07:06 · 1049 阅读 · 0 评论 -
数据结构与算法-12爬楼梯
Description爬楼梯的时候,设每次可以上一级台阶或者两级台阶,计算上 n 级台阶的方案数。Input输入包含多组测试数据,对于每组测试数据: 输入只有一行为一个正整数 n(1 ≤ n ≤ 50)。Output对于每组测试数据,输出符合条件的方案数。 注意:64-bit 整型请使用 long long 来定义,并且使用 %lld 或 cin、cout 来输入输出,请不要使用 __i...原创 2020-01-31 21:57:06 · 461 阅读 · 0 评论 -
数据结构与算法-11数组的正负数分割排序
Description设任意n个整数存放于数组A[1…n]中,试编写算法,将所有正数排在所有负数前面(要求:正(负)数序列中数的相对顺序不变,算法时间复杂度为O(n))。Input多组数据,每组数据有两行,第一行为数组中存放的数的个数n,第二行为n个整数。当n=0时输入结束。Output对于每组数据分别输出一行,为分割排序后的数组。Sample Input41 2 -1 25-...原创 2020-01-31 12:06:04 · 3099 阅读 · 0 评论 -
数据结构与算法-10稀疏矩阵的快速转置
Description转置运算是一种最简单的矩阵运算,对于一个mn的矩阵M( 1 = < m < = 10000,1 = < n < = 10000 ),它的转置矩阵T是一个nm的矩阵,且T( i , j )=M( j , i )。显然,一个稀疏矩阵的转置仍然是稀疏矩阵。你的任务是对给定一个m*n的稀疏矩阵( m , n < = 10000 ),求该矩阵的转置矩阵并...原创 2020-01-31 00:24:19 · 1745 阅读 · 0 评论 -
数据结构与算法-9一趟快排
Description给定N个长整型范围内的整数,要求输出以给定数据中第一个数为枢轴进行一趟快速排序之后的结果。Input连续输入多组数据,每组输入数据第一行给出正整数N(N < = 10^5),随后给出N个长整型范围内的整数,数字间以空格分隔。Output输出一趟快速排序后的结果,数字间以一个空格间隔,行末不得有多余空格。Sample Input849 38 65 97 7...原创 2020-01-30 20:22:19 · 376 阅读 · 0 评论 -
数据结构与算法-8数组的分割
Description已知由n(n≥2)个正整数构成的集合A={ak}(0≤k<n),将其划分为两个不相交的子集A1和A2,元素个数分别是n1和n2,A1和A2中元素之和分别为S1和S2。设计一个尽可能高效的划分算法,满足|n1-n2|最小且|S1-S2|最大。Input多组数据,每组数据两行。第一行为一个整数n,代表数组中有n个元素。第二行为数组中的n个元素(元素之间用空格分隔)。当...原创 2020-01-30 19:18:35 · 5737 阅读 · 1 评论 -
数据结构与算法-7基于二叉链表的树结构相等的判断
Description设二叉树中每个结点的元素均为一个字符,按先序遍历的顺序建立二叉链表,按此方法创建两棵二叉树,然后编写递归算法判断这两棵树是否相等。Input多组数据,每组数据有两行。每行为一个二叉树的先序序列(序列中元素为‘0’时,表示该结点为空)。当输入只有一个“0”时,输入结束。Output每组数据输出一行。若两个二叉树相等输出“YES”,否则输出“NO”。Sample In...原创 2020-01-29 11:05:34 · 937 阅读 · 0 评论 -
数据结构与算法-6查找两个单词链表共同后缀的起始结点
Description假定采用带头结点的单链表保存单词,当两个单词有相同的后缀时,则可共享相同的后缀空间。例如,“loading”和“being”的存储映像如下图所示:设str1和str2分别指向两个单词所在单链表的头结点,请实现一个时间上尽可能高效的算法,找出由str1和str2所指的两个链表共同后缀的起始位置的结点,输出该结点对应的字符(如图中的字符i)。Input多组数据,每组数据...原创 2020-01-28 11:13:32 · 1733 阅读 · 3 评论 -
数据结构与算法-5基于链表的两个一元多项式的基本运算
Description给定两个一元多项式A(x)与B(x),利用链表表示A(x)与B(x),实现A(x)与B(x)的加法、减法、 乘法和求导运算。Input输入多组数据,总计n*( a+b+2)+1行。其中,第一行整数n代表总计有n组数据,之后依次输入 n组数据。每组数据包括a+b+2行,其中第一行是两个整数a和b,分别代表A(x)与B(x)的项数。 之后紧跟a行,每行两个整数a1和a2,...原创 2020-01-27 23:04:26 · 4943 阅读 · 1 评论 -
数据结构与算法-4二叉排序树的创建
Description在树结构中,有一种特殊的二叉树叫做排序二叉树,直观的理解就是——(1).每个节点中包含有一个关键值 (2).任意一个节点的左子树(如果存在的话)的关键值小于该节点的关键值 (3).任意一个节点的右子树(如果存在的话)的关键值大于该节点的关键值。现给定一组数据,请你对这组数据按给定顺序建立一棵排序二叉树,并输出其中序遍历的结果。Input输入包含多组数据,每组数据格式如下...原创 2020-01-25 15:47:52 · 860 阅读 · 1 评论 -
数据结构与算法-3根据中序后序遍历序列还原二叉树
Description已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历序列。Input输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据。每组包括两个长度小于50 的字符串,第一个字符串表示二叉树的中序遍历序列,第二个字符串表示二叉树的后序遍历序列。Output输出二叉树的先序遍历序列。Sample Input2dbgeafcdgebfcal...原创 2020-01-25 15:02:40 · 425 阅读 · 0 评论 -
数据结构与算法-2二叉树的层次遍历
Description已知一个按先序输入的字符序列,如abd,eg,cf,(其中,表示空结点)。请建立二叉树并求二叉树的层次遍历序列。Input输入数据有多行,第一行是一个整数t (t<1000),代表有t行测试数据。每行是一个长度小于50个字符的字符串。Output输出二叉树的层次遍历序列。Sample Input2abd,eg,cf,xnl,i,u,Sample O...原创 2020-01-25 10:50:57 · 421 阅读 · 0 评论 -
数据结构与算法-1树的同构
Description给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。现给定两棵树,请你判断它们是否是同构的。Input输入数据包含多组,每组数据给出2棵二叉树的信息。对于每棵树,首先在一行中给出一个非负整数N (≤1...原创 2020-01-24 16:09:27 · 278 阅读 · 0 评论