算法
文章平均质量分 50
敲代码两年半的练习生
这个作者很懒,什么都没留下…
展开
-
【算法】测试C++标准库中sort算法的平均运行时间(C++源码)
测试C++标准库中sort算法的平均运行时间① 声明包含n=100000个整数的vector对象;② 使用rand()函数为vector中的元素随机赋值,要求每一个元素X的取值范围: 1<=X<=100000;③ 使用sort()函数对上述随机数组进行排序并统计运行时间;④ 重复上述①—③过程100次,然后计算并在屏幕打印sort()排序的平均运行时间;⑤ 将计算sort算法平均运行时间的代码放入一个函数,该函数的签名为(n为数组大小):void average_time_sort(i原创 2021-01-30 16:02:03 · 889 阅读 · 1 评论 -
【算法】贪心求解仓库设置位置问题(C++源码)
问题描述城市街道如下图所示,所有街道都是水平或垂直分布,假设水平和垂直方向均有m+1条,任何两个相邻位置之间的距离为1。在街道的十字路口有n个商店,下图中的n=3,m=8,3个商店的坐标位置分别是(2,4),(5,3),(6,6)。现在,需要在某个路口位置建立一个合用的仓库。若仓库位置为(3,5),那么这3个商店到仓库的路程(只能沿着街道行进)总长度最少是10。设计一个算法找到仓库的最佳位置,使得所有商店到仓库的总路程最短。步骤描述定义一个judge函数找minpath,包含三个点的横纵坐标,在8*8原创 2021-02-02 12:27:57 · 2603 阅读 · 3 评论 -
【算法】袋鼠过河,动态规划问题(C++源码)
问题描述一只袋鼠要从河这边跳到河对岸,河很宽,但是河中间打了很多桩子,每隔一米就有一个,每个桩子上有一个弹簧,袋鼠跳到弹簧上就可以跳的更远。每个弹簧力量不同,用一个数字代表它的力量,如果弹簧的力量为5,就表示袋鼠下一跳最多能够跳5米,如果为0,就表示陷阱去无法继续跳跃。河流一共n米宽,袋鼠初始在第一个弹簧上面,若跳到最后一个弹簧就算过河了,给定每个弹簧的力量,求袋鼠最少需要多少跳能够到达对岸。如果无法到达,输出-1。输入描述输入分两行,第1行是数组长度,第2行是每一项的值,用空格分开。输出描述输出原创 2021-02-02 12:23:48 · 1728 阅读 · 3 评论 -
【算法】给定一个有n个正整数的数组A和一个整数sum,求选择数组A中部分数字和为sum的方案数(C++源码)
问题描述给定一个有n个正整数的数组a和一个整数sum,求选择数组a中部分数字和为sum的方案数。若两种选取方案有一个数字的下标不一样,则认为是不同的方案。输入描述输入为两行,第1行为两个正整数n和sum,第2行为n个正整数,以空格隔开。输出描述输出所求的方案数。样例5 155 5 10 2 3输出4步骤描述动态规划问题,构建一个dp二维数组,将第一行第一列全部置零,再将dp[0][0]=1;上下传值,并判断若满足给定的约束条件,则累加。最后输出右下角元素。运行结果截图源代码(C原创 2021-02-02 12:20:26 · 3157 阅读 · 3 评论 -
【算法】求解最小机器重量设计问题回溯法(C++源码)
问题描述设某一机器由n个部件组成,部件编号为1~n,每一种部件都可以从m个供应商处购得,供应商编号为1~m。设wij是从供应商j处购得的部件i的重量,cij是相应的价格。对于给定的机器部件重量和机器部件价格,计算总价格不超过cost的最小重量机器设计,可以在同一个供应商处购得多个部件。输入描述第一行输入3个整数n,m,cost,接下来n行输入wij(每行m个整数),最后n行输入cij(每行n个整数)输出描述输出的第1行包括n个整数,表示每个对应的供应商编号,第2行为对应的重量。输原创 2021-02-02 12:06:24 · 1562 阅读 · 1 评论 -
【算法】所有路径和中最小路径和并打印路径(C++源码)
问题描述给定一个m行n列的矩阵,从左上角开始每次只能向右或者向下移动,最后到达右下角的位置,路径上的所有数字累加起来作为这条路径的路径和。请设计一个算法求所有路径和中最小路径和,并打印输出该路径。例如,以下矩阵1 3 5 98 1 3 45 0 6 18 8 4 0的最小路径和是12,对应的路径为1->3->1->0->6->1->0步骤描述定义一个4*4的矩阵,输入后定义开始下标为[0][0],后判断下和左的大小移动行和列,若相等则继续判断下一个原创 2021-02-02 12:06:00 · 1010 阅读 · 3 评论 -
【算法】算法之数据字典加密(C++源码)
问题描述给定一个整数n和一个由不同大写字母组成的字符串str(长度大于5、小于12),每一个字母在字母表中对应有一个序数(A=1,B=2,…,Z=26),从str中选择5个字母构成密码,例如选取的5个字母为v,w,x,y和z,它们要满足(v的序数)-(w的序数)2+ (x的序数)3- (y的序数)4+ (z的序数)5=n 。例如,给定的n=1和字符串str为“ABCDEFGHIJKL”,一个可能的解是“FIECB”,因为6-92+53-34+25=1,但这样的解可能有多个,最终结果是按字典序最大的那个,原创 2021-02-02 12:04:56 · 858 阅读 · 1 评论 -
【算法】算法之出现次数最多且数值最小的数(C++源码)
问题描述给定n个正整数,编写一个算法找出它们中出现次数最多的数。如果这样的数有多个,请输出其中最小的一个。输入描述输入的第1行只有一个正整数n,表示数字的个数;输入的第2行有n个整数s1,s2,…,sn。相邻的数用空格分隔。输出描述输出这n个数出现次数最多的数。如果有多个,输出其中最小的一个。例如,输入的6个整数为10,1,10,20,30,20时,输出为10。步骤描述输入vector数组,用sort函数排序,统计最长连续子串就行。运行结果截图源代码(C++)#include &原创 2021-02-01 07:59:46 · 793 阅读 · 1 评论 -
【算法】求解满足条件整数对(C++源码)
问题描述给定N个整数Ai以及一个正整数C,问其中有多少对i,j满足Ai–Aj=C?输入描述第1行输入两个空格隔开的整数N和C,第2~N+1行每行包含一个整数Ai输出描述输出满足条件的i,j对的数量例如:当N=5,C=3,A1~A5:2,1,4,2,5时,输出为3步骤描述做了两种方法,一种是直接暴力求解,时间复杂度为O(n²),第二种是先排序后直接排除小于差的数,时间复杂度为O(nlogn)运行结果截图源代码(C++)//#include<iostream>//#incl原创 2021-02-01 07:59:20 · 1492 阅读 · 1 评论 -
【算法】美团之大富翁问题(C++源码)
问题描述玩家根据骰子的点数决定走的步数,即骰子点数为1时可以走一步,点数为2时可以走两步,点数为n时可以走n步。求玩家走到第n步(n小于等于骰子最大点数且投骰子方法唯一)时总共有多少种投骰子的方法。输入描述输入一个1至6之间的整数输出描述输出一个整数,表示投骰子的方法数例如,输入为6时,输出为32.步骤描述a[1]=1;a[2]=a[1]+1=2;a[3]=a[2]+a[1]+1=4;a[4]=a[3]+a[2]+a[1]+1=7;……a[6]= a[5]+a[4]+a[3]+a[2原创 2021-02-01 07:58:44 · 1775 阅读 · 1 评论 -
【算法】算法之点菜问题(C++源码)
任务描述某实验室经常有活动需要叫外卖,但是每次叫外卖的报销经费的总额最大为C元,有N种菜可以点。经过长时间的点菜,实验室对于每种菜i都有一个量化的评价分数(表示这个菜的可口程度),为Vi,每种菜的价格为Pi。问如何选择各种菜,才能在报销额度内使点到的菜的总评价最大。注意:由于需要营养多样化,每种菜只能点一次。请设计算法求解上述点菜问题,并使用下页中的数据测试你的算法。例子C = 90, N = 4:价格评价分数菜12025菜23020菜34050原创 2021-02-01 07:58:18 · 1445 阅读 · 1 评论 -
【算法】计算最长的公共连续子串的长度(C++源码)
任务描述:给定两个字符串(可能包含空格),请设计算法找出其中最长的公共连续子串的长度,例如,字符串“abcde”和“abgde”的最长公共连续字串为“ab”,其长度为2。步骤描述定义一个getsame函数,内包含三个参数,三个字符指针,第一个为字符串“abcde”,第二个为字符串“abgde”,第三个为两字符串的共有部分,定义一个count数组,全部置为零,从后往前比较字符是否相等,相等了往前加一,与maxlen比较,输出最大的联系子串,并记录下标,输出。运行结果截图源代码(C++)#incl原创 2021-02-01 07:57:48 · 606 阅读 · 1 评论 -
【算法】动态规划之计算二项式系数(C++源码)
任务描述请设计并编程实现一个时间复杂度为O(n2)的算法来计算二项式系数Cnk(k <= n)。其中二项式系数Cnk的求值过程如下:• Ci0=1 • Cii=1 • Cij= Ci-1j-1 + Ci-1j , 当i>=j时步骤描述构造二维数组来代替矩阵,通过累加迭代的方式进行求解,输出最终的结果,再输入过程中判断n是否大于k,若是则继续,若否则终止程序输出错误。运行结果截图源代码(C++)#include <iostream>using namespa原创 2021-02-01 07:56:32 · 2935 阅读 · 4 评论 -
【算法】动态规划之图的最短路径(C++源码)
任务描述请采用动态规划算法编程以求解如下图的最短路径问题:步骤描述1、标明编号2、创建数组a存储分条路径的长度,f为每条路径分别的长度,c存储最短的路径位置,最后比较f的大小,输出min和各c的值。运行结果截图源代码(C++)#include <iostream>using namespace std;#define INF 0x3f3f3f3fint main(){ int n,a[105][105],c[105]={0}; cin>&g原创 2021-02-01 07:55:51 · 2353 阅读 · 2 评论 -
【算法】算法之字符统计哈夫曼编码(C++源码)
任务描述有一个英文句子str=“The following code computes the intersection of two arrays.”,请统计各个字符出现的次数,以其为频率构造对应的哈夫曼编码,将该英文句子进行编码以得到enstr。编写程序实现上述功能。步骤描述1、定义哈夫曼数组的结构体HTreeNode用ht[ ]表示,里面包含:字符data,权值weight,父亲结点p,左孩子lc,右孩子lr。2、定义点的结构体nodetype,包含:字符data,权值weight,编号no,原创 2021-02-01 07:54:03 · 1166 阅读 · 2 评论 -
【算法】算法之会议安排问题(C++源码)
任务描述会议安排问题。有一组会议A和一组会议室B,A[i]表示第i个会议的参加人数,B[j]表示第j个会议室最多可以容纳的人数。当且仅当A[i] <= B[j]时,第j个会议室可以用于举办第i个会议。给定数组A和数组B,请设计算法计算最多可以同时举办多少个会议。• 例如,A[]={1,2,3},B[]={3,2,4},结果为3;• 若A[]={3,4,3,1},B[]={1,2,2,6},结果为2。步骤描述1、建立A,B数组来存储会议人数跟会议室大小,手动输入会议室人数个数和会议室个数。2原创 2021-02-01 07:53:36 · 2916 阅读 · 1 评论 -
【算法】带权图的最短路径算法(C++源码)
任务描述有一个含n个顶点(顶点编号0~n-1)的带权图,用邻接矩阵数组A表示,采用分枝限界法求从起点s到目标点t的最短路径长度,并输出该路径(如果有多条满足的最短路径,需要都打印出来)。请设计测试数据对上述算法进行测试。步骤描述创建一个结构体包含:结点编号,人员编号,x[i]为人员i分配的任务编号,worker[i]=true表示任务i已经分配,已经分配任务所需要的成本,下界,重载<关系函数。用init函数输入结点个数、边数、起始点、目标点,以及对应的边长,通过bfs遍历在主函数中输出。运行结原创 2021-02-01 07:51:59 · 2750 阅读 · 3 评论 -
【算法】优先队列的分枝限界算法的流水作业调度问题(C++源码)
任务描述有一个流水作业调度问题,n=4,a[]={5,10,9,7},b[]={7,5,9,8},请实现基于优先队列的分枝限界算法进行求解。步骤描述创建一个结构体包含:结点编号,x[i]表示第i步分配作业编号,y[i]=1表示编号为i的作业已经分配,步骤编号,已经分配作业M1的执行时间,已经分配作业M2的执行时间,下界,函数的重载与关系函数,1b越小越优先出队。用bond函数求结点e的限界值。用bfs()求解流水作业调度问题。在主函数中分别调用。运行结果截图源代码(C++)#include&l原创 2021-01-31 10:46:54 · 4074 阅读 · 1 评论 -
【算法】递归回溯算法(C++源码)
任务描述:采用递归回溯法设计一个算法,求从1~n的n个整数中取出m个元素的排列,要求每个元素最多只能取一次。例如,n=3,m=2的输出结果是(1,2),(1,3),(2,1),(2,3), (3,1),(3,2)。要求选取不同的n和m测试所设计的上述算法运行结果截图:源代码(C++)#include <iostream>using namespace std;int cs,n,m;int a[100];void f(int t){ int i,j;原创 2021-01-31 10:42:12 · 1710 阅读 · 1 评论 -
【算法】选择元素个数最少解算法(C++源码)
任务描述给定若干个正整数a0、a1、….、an-1,从中选出若干个数,使它们的和恰好为k,要求找出选择元素个数最少的解。要求:1、选取一组正整数以及k测试所设计的算法2、设计相应的剪枝函数,对上述算法进行优化步骤描述求子集和问题的解:(1)定义两个全局数组,a数组为符合条件的数存储,b数组负责判断是否符合条件和最优解;(2)在主函数中输入数组的大小n,目标和k,以及数组的各元素,最终输出最优解。运行结果截图源代码(C++)#include<iostream>usin原创 2021-01-31 10:38:09 · 3872 阅读 · 4 评论 -
【算法】求解迷宫路径算法(C++源码)
任务描述以如下8*8的迷宫图为例,左边是迷宫的布局,右边 为求解得到的一条迷宫路径:OXXXXXXXOOOOOXXXXOXXOOOXXOXXOXXOXOXXXXXXXOXXOOOXXOOOOXOOXXXXXXXO其中,O表示通路方块,X表示障碍方块。假设入口是位置(0,0),出口 为右下角方块位置(7,7)。设计一个程序采用递归方法求指定入口到出口的 一条迷宫路径步骤描述判断前后的字符是否为路径,根据下右上左的顺序依次判断,最后替换输出。运行结果截图源代码(C++)/*OXX原创 2021-01-31 10:34:51 · 3112 阅读 · 1 评论 -
【算法】0/1 背包问题的最优解(C++源码)
任务描述用蛮力法,编程求解如下0/1背包问题的最优解:n = 7, W = 15价值 P = {10, 5, 15, 7, 6, 18, 3}重量 w = {2, 3, 5, 7, 1, 4, 1}步骤描述先用一个vector存放幂集,定义一个可以调用的函数PSet用于求1~n的幂集ps,再创建一个可以调用的函数Knap用于求所有方案和最佳方案的函数,最后在主函数调用。运行结果截图源代码(C++)#include <iostream>#include <vecto原创 2021-01-31 10:31:37 · 1841 阅读 · 1 评论 -
【算法】测试数组逆序对个数算法(C++源码)
任务描述给定一个整数数组A=(a0, a1,…,an-1),若i<j且ai > aj,则<ai,aj>就为一个逆序对。例如数组(3,1,4,5,2)的 逆序对有<3,1>,❤️,2>,<4,2>,<5,2>。请编写并测试 求A中逆序对个数的算法,并分析其时间复杂度。步骤描述随机生成数暴力求解,时间复杂度O(n²)运行结果截图源代码(C++)#include<iostream>#include<ctime&原创 2021-01-31 10:14:19 · 3242 阅读 · 2 评论 -
【算法】无序数组的查找算法(C++源码)
任务描述设计一个查找算法,该算法将在一个给定的无序数组中查找指定的元素,若找到该元素返回true,反之返回false。请分析你所设计算法的时间复杂度。要求编写并测试所设计的查找算法实验报告中还需要包含对所设计算法的时间复杂度分析过程。步骤描述运用时间内存分配,输入数组的大小,利用随机数生成数组需要的随机数(随机数范围<=100),直接按数组顺序求复合条件的数,时间复杂度为O(n)。程序运行结果截图源代码(C++)#include<iostream>#include原创 2021-01-31 10:05:04 · 1834 阅读 · 1 评论 -
【算法】比较快速排序和二路归并排序的平均算法复杂度(C++源码)
任务描述快速排序和二路归并排序的平均算法复杂度为O(nlog2n),请根据自己实现的代码,分别统计n=100000,1000000时上述两个算法的平均运行时间,并根据实验结果回答如下问题:1)在上述输入规模下,两个算法的平均运行时间是否处在同一数量级?如果不是,请析其可能的原因。2)应用STL库中的sort算法,在上述输入规模下的平均运行时间多少?是否同你实现的快速排序以及归并排序在平均运行时间上处于同一数量级?步骤描述运用C++统计代码运行时间计时器进行计时,并每次调整数组大小。1>两个原创 2021-01-31 07:15:14 · 487 阅读 · 1 评论 -
【算法】采用分治法实现按升序排序的自顶向下二路归并排序算法(C++源码)
任务描述请采用分治法实现按升序排序的自顶向下二路归并排序算法,设计测试用例以验证算法的准确性。要求:使用STL中的vector存储输入数据以及中间数据步骤描述输入数组的个数,建立vector数组,建立合并算法merge(vector&a,vector&b,int l,int r,int m),建立合并排序递归算法mergesort(vector&a,vector&b,int l,int r),在左<右递归调用本身,输出排序后的vector数组。程序运行结果截图原创 2021-01-31 07:14:16 · 1493 阅读 · 2 评论 -
【算法】用分治法实现按升序排序的快速排序算法(C++源码)
任务描述请采用分治法实现按升序排序的快速排序算法,设计测试用例以验证算法的准确性。要求:使用STL库中的vector存储输入数据。步骤描述建立vector数组,输入数组的个数,编写输入vector函数put_vec和输出vector函数print_vec。建立快排,递归调用,结束后调用输出函数输出数组。程序运行结果截图源代码-未使用vector(C++)#include <iostream>#include <cmath>#include <cstrin原创 2021-01-31 06:56:16 · 1202 阅读 · 1 评论 -
【算法】简单的使用vector的输入输出(C++源码)
这里实现一个简单的vector的输入输出#include <iostream>#include <vector>#include <cmath>#include <cstring>using namespace std;void put_vec(vector<int>&v){ for(size_t i=0 ; i<v.size() ; ++i) { cin>>v[i];原创 2021-01-30 20:00:25 · 1838 阅读 · 1 评论 -
【算法】采用递归与非递归算法打印螺旋矩阵(C++源码)
螺旋矩阵螺旋矩阵是指一个呈螺旋状的矩阵,它的数字由第一行开始到右边不断变大,向下变大,向左变大,向上变大,如此循环源代码-递归(C++)#include "stdio.h"#include <iostream>/*void SetMatrix(int **matrix, int x, int y, int start, int n) { int i, j; if (n <= 0) return; if (n =原创 2021-01-30 17:24:34 · 828 阅读 · 1 评论 -
【算法】设计一个递归算法以生成螺旋矩阵并输出一个螺旋矩阵(C++源码)
设计大纲请设计一个递归算法以生成螺旋矩阵并输出,一个螺旋矩阵;设计要求1、递归算法;2、螺旋矩阵;3、需要在实验 报告中给出该算法设计的思路,如“大问题”是什么,“小问题”是什么? 两者关系如何?设计思路没有用递归做,用的是二维数组的指针方法的做的源代码(C++)#include<iostream>#include<malloc.h>using namespace std;int main(){ int **p=NULL; int n,i,j,原创 2021-01-30 17:15:45 · 794 阅读 · 1 评论 -
【算法】选择排序和冒泡排序这两个算法,哪一个排序效率高?(C++源码)
设计提纲请采用递归方式实现按升序排序的冒泡排序算法,设计测试用例以验证算法的准确性,并通过实验回答如下问题:选择排序和冒泡排序这两个算法,哪一个排序效率高?要求1、递归的方法;2、升序排序;3、冒泡排序;4、设计测试用例以验证算法的准确性;5、回答选择排序和冒泡排序这两个算法,哪一个排序效率高?设计思路定义sort函数,sort函数是一个选择排序的函数,sort函数中包含三个参数变量,第一个变量是数组指针,第二个是数组的长度,第三个是记录排序次数,也在控制递归次数,在main函数中调用;原创 2021-01-30 17:10:12 · 921 阅读 · 1 评论 -
【算法】采用递归方式实现按升序排序的选择排序算法(C++源码)
请采用递归方式实现按升序排序的选择排序算法要求:1、递归的方法;2、升序排序;3、选择排序;4、设计测试用例以验证算法的准确性。提示:可以使用STL库中的sort函数来验证实现算法的准确性。设计思路定义sort函数,sort函数是一个选择排序的函数,sort函数中包含三个参数变量,第一个变量是数组指针,第二个是数组的长度,第三个是记录排序次数,也在控制递归次数,在main函数中调用;源代码(C++)//请采用递归方式实现按升序排序的选择排序算法,设计测试用例以验证算法的准确性。#in原创 2021-01-30 17:07:19 · 1073 阅读 · 2 评论 -
【算法】设计并实现计算数列第n项的递归算法,通过打印输出整个数列以验证算法的正确性(C++源码)
请设计并实现计算数列第n项的递归算法,通过打印输出整个数列以验证算法的正确性整数数列的首项a1=1,后续奇数项和偶数项的计算公式分别为:a2n=a2n-1 + 2a2n+1 = a2n-1+ a2n -1设计思路① 首先设置while循环碰到〇时弹出,可设置成while(1);② 定义f(x)函数,运用递归,第一项为1,之后偶数项为前一项奇数项加2,奇数项为后两项之和减1;③ 判断x是否为1,若为1,则返回1,若不为1则进行递归函数。源代码#include<iostream>原创 2021-01-30 17:04:50 · 2676 阅读 · 3 评论 -
【算法】设计并实现一个算法以判断其中是否存在出现次数超过所有元素一半的元素(C++源码)
设计并实现一个算法以判断其中是否存在出现次数超过所有元素一半的元素(C++源码)对于给定的一个含n(n>2)个整数的数组,请设计并实现一个算法以判断其中是否存在出现次数超过 所有元素一半的元素,如有请打印输出该元素。要求:1、请选用合适的STL容器进行算法设计与实现;2、请通过多组测试数据以验证算法的正确性。设计思路① 定义vec(),cnt()数组,输入vec()数组;② 对于数的个数进行累加, 保存于cnt()数组中,判断个数是否大于判断出的最大个数的数字,若满足则保存数字于temp原创 2021-01-30 16:57:44 · 1432 阅读 · 1 评论 -
【算法】排序使用STL库中的sort算法(C++源码)
排序使用STL库中的sort算法请设计包含身高、学生性别信息的学生结构体,随机生成n(n>10)个学生根据学生的身高按降序进行排序并打印输出(排序可以使用STL库中的sort算法);要求:1、学生的身高,男生取值范围在160cm-180cm之间,女生在150- 170cm之间(提示:rand()%21可以生成0-20之间的整数);2、学生的性别为字符串:男生对应字符“male”,女生对应字 符”female”(提示:可以随机生成0-1整数,如果当前值为0,可 以将学生性别设为“male”,反之原创 2021-01-30 16:46:49 · 991 阅读 · 1 评论 -
【算法】测试C++标准库中sort算法在不同输入规模下的运行时间 并观察其变化趋势(C++源码)
测试C++标准库中sort算法在不同输入规模下的运行时间 并观察其变化趋势① 分别计算输入数组大小为n=100,1000,10000,100000,1000000,10000000时的平均运行时间;② 根据不同规模的运行时间,判断sort()排序算法的运行趋势,判断时间复杂度是否为O(n²)。源代码(C++)#include "stdafx.h"#include<iostream>#include<vector>#include<algorithm&g原创 2021-01-30 16:40:55 · 695 阅读 · 1 评论