算法
passer__jw767
这个作者很懒,什么都没留下…
展开
-
【计算机算法】递归——打印旋转方阵(正转及逆转)
通过如下程序来打印旋转方阵思想:填充数组后通过控制输出的格式,就可以打印顺转、逆转的旋转方阵#include<stdio.h>int a[100][100];int m = 1;void fill(int i,int n){ int u=i,v=i,j; //横坐标u,列坐标v,j用于计数 if(n<=0) //边界条件 return; if(n==1) //边界条件 a[i][i]=m; for(j=1;j<=n-1;j++) //从左原创 2021-01-05 22:26:37 · 423 阅读 · 0 评论 -
【计算机算法】杨辉三角——递推
题目输入行号和列号,输出对应的位置的值以及到这个位置的杨辉三角代码//输入行号和列号,输出对应的位置的值以及到这个位置的杨辉三角#include<stdio.h>#define MAXN 100//根据需要可以增加数组空间#include<iostream>using namespace std;int main(){ int n,m,arr[MAXN][MAXN];//如果输出过大可以考虑将数组类型改成long或者longlong cin>>n>原创 2021-01-03 22:38:27 · 346 阅读 · 0 评论 -
【计算机算法】算法概述
算法概述1、求解最大公约数(穷举法与欧几里得算法)①穷举法②欧几里得算法2、求和基本求和算法应用求和公式算法3、递归算法时间复杂度(排序、汉诺塔)4、vector的函数1、求解最大公约数(穷举法与欧几里得算法)①穷举法设置c循环枚举从n开始递减至1,在循环中逐个检测c是否满足条件: m%c0 and n%c0,最先满足的c即为所求。②欧几里得算法(1) 数 m 除以 n 得余数 r;若r=0,则n为所求的最大公约数。(2) 若 r≠0,以n为m,r为n,继续(1).欧几里德算法具体描述如下:原创 2021-01-02 23:08:30 · 287 阅读 · 0 评论 -
【计算机算法】动态规划——数塔问题
代码:#include<iostream>using namespace std;int arr[100][100];//存储数塔的数组 int step[100][100];//记录步数的数组,即往哪个方向走 int calculatearr[100][100];//用于记录计算步数的数组int layer;//层数 int k = 1;//这是用于输出层数时判断到第几层了 void manage(); void outAndNext(int x,int i,int j)原创 2021-01-01 22:51:33 · 605 阅读 · 0 评论 -
【计算机算法】工作分配问题
工作分配问题问题描述:设有n件工作分配给n个人。将工作i分配给第j个人的费用为cij,请设计算法,为每个人都分配1件不同的工作,并使得总费用达到最小。实现提示:该问题的解空间是一棵排列树,可用搜索排列树的回溯框架实现。代码如下:#include<iostream>#include<climits>using namespace std;int work[100];// 工作数组,用于存储工作编号int work_fee[100][100];// 每个工人对应的每原创 2020-12-28 21:46:40 · 343 阅读 · 0 评论 -
【计算机算法】回溯——n皇后问题、0-1背包问题
回溯解决n皇后问题、0-1背包问题n皇后问题回溯——子集树解决办法回溯——排列树解决办法0-1背包问题回溯——子集树解决办法n皇后问题回溯——子集树解决办法#include<iostream>#include<cmath>#include<algorithm> using namespace std;int *x;int n;//皇后的个数 int num = 0;//解的个数 bool constraint(int k){ for(int i原创 2020-12-24 22:06:36 · 223 阅读 · 0 评论 -
【计算机算法】回溯——子集和问题、旅行商问题
求集合中满足一个值的子集和测试数据:43113 24 11 7结果:{13,11,7}{24,7}#include<iostream>using namespace std;int *x,*y;int size,sum;void output(){ int count = 0;//计算子集中的个数,这个只是用来控制是否输出逗号的情况 int tempsum = 0; for(int i = 1;i <= size;i++){ if(y[i] !原创 2020-12-23 22:13:22 · 320 阅读 · 0 评论 -
【计算机算法】贪心算法——最优分解问题
最优分解问题题目问题描述:设n是一个正整数,要求将n分解为若干互不相同的自然数之和,且这些自然数的乘积最大。输入正整数n输出计算的最大乘积。如输入10,则输出30.提示:若a+b=const,则a-b的绝对值越小,ab值越大。贪心策略:将n分成从2开始的连续自然数之和,如果最后剩下一个数,则将此数在后项优先的方式下均匀地分给前面各项。代码#include<bits/stdc++.h>using namespace std;int main(){ in原创 2020-12-14 21:14:02 · 1408 阅读 · 0 评论 -
【计算机算法】贪心算法——最优服务次序问题及多处最优服务次序问题
最优服务次序问题及多处最优服务次序问题一、最优服务次序问题题目输入输出代码注意事项二、多处最优服务次序问题题目输入输出代码一、最优服务次序问题题目问题描述:设有n个顾客同时等待一项服务,顾客i需要的服务时间为ti,(1<=i<=n)。应如何安排n个顾客的服务次序才能使平均等待时间达到最小?(平均等待时间是n个顾客等待服务时间总和除以n)输入第一行为一个正整数n,表示有n个顾客第二行为n个正整数,表示n个顾客需要的服务时间输出最小平均等待时间代码#include&原创 2020-12-13 21:53:22 · 2170 阅读 · 0 评论 -
【计算机算法】递归——半数集问题
题目问题描述:给定一个自然数n,由n开始可以依次产生半数集set(n)中的数如下:(1) n∈set(n) ;(2) 在n的左边加上一个自然数,但该自然数不能超过最近添加的数的一半;(3) 按此规则进行处理,知道不能再添加自然数为止。例如,set(6)={6,16,26,126,36,136},半数集set(6)中有6个元素。输入:整数n(0<n<1000)输出:半数集set(n)中的元素个数。请设计递归函数,求出set(n)的个数,并分析算法时间复杂度,对算法进行改进,用程序原创 2020-12-12 23:02:44 · 586 阅读 · 0 评论 -
【计算机算法】贪心算法——喷水装置
喷水装置喷水装置题目输入格式输出格式输入样例输出样例数据范围与提示程序代码喷水装置题目长L米,宽W米的草坪里装有n个浇灌喷头。每个喷头都装在草坪中心线上(离两边各W/2米)。我们知道每个喷头的位置(离草坪中心线左端的距离),以及它能覆盖到的浇灌范围。请问:如果要同时浇灌整块草坪,最少需要打开多少个喷头?输入格式输入包含若干组测试数据。第一行一个整数T表示数据组数。每组数据的第一行是整数n、L和W的值,其中n≤10 000。接下来的n行,每行包含两个整数,给出一个喷头的位置和浇灌半径。原创 2020-12-09 21:33:26 · 254 阅读 · 0 评论 -
【计算机算法】贪心算法——看电影、活动选择问题
看电影及活动选择问题看电影题目输入格式输出格式输入样例输出样例实现代码活动选择问题题目输入格式输出格式输入样例输出样例样例解释实现代码注意事项看电影题目终于到周末了,明明是特别喜欢看电影。他想在一天内尽量多的看到完整的多部电影。 现在他把他喜欢的电影的播放时间表给你,希望你能帮他合理安排。输入格式输入包含多组测试数据。每组输入的第一行是一个整数n(n<=100),表示明明喜欢的电影的总数。接下来n行,每行输入两个整数si和ei(1<=i<=n),表示第i个电影的开始和结束原创 2020-12-08 22:07:50 · 2495 阅读 · 0 评论 -
【计算机算法】贪心算法——最优合并问题
贪心算法习题最优合并问题输入格式输出格式输入样例输出样例实现代码优化max函数最优合并问题题目来源:王晓东《算法设计与分析》给定k 个排好序的序列, 用 2 路合并算法将这k 个序列合并成一个序列。 假设所采用的 2 路合并算法合并 2个长度分别为m和n的序列需要m+n-1 次比较。试设 计一个算法确定合并这个序列的最优合并顺序,使所需的总比较次数最少。为了进行比较,还需要确定合并这个序列的最差合并顺序,使所需的总比较次数最多。输入格式第一行有 1 个正整数k,表示有 k个待合并序列。 第二原创 2020-12-07 20:49:43 · 2032 阅读 · 0 评论 -
【计算机算法】贪心算法——装箱问题、月饼
#include<stdio.h>#include<iostream> #include<algorithm> #define MAXN 1000using namespace std;struct mooncake{ double weight; double value; double unit;}sold[MAXN];bool cmp(mooncake a,mooncake b){ return a.unit>b.unit;}int原创 2020-12-06 21:39:55 · 876 阅读 · 0 评论 -
【计算机算法】解分数不等式
这也称不上是算法,只是简单地用程序来实现解方程。用程序解分数不等式的方法如下:#include<stdio.h>#include<math.h>#include<iostream>using namespace std;int main(){ double s=0,i=1; long temp1,temp2;//用long类型定义不显示科学计数法的答案 int a,b; cout<<"请输入边界的值a和b(a<b):"; cin原创 2020-11-29 21:24:24 · 1457 阅读 · 0 评论 -
【计算机算法】基于最小的枚举求精——解超越方程
解决求超越方程x的问题以下是基于最小的枚举求精法,还有基于符号的枚举求精方法。用基于最小的枚举求精法替代暴力破解方法,可以省去不少时间,而且暴力破解并不一定能够找出精确地小数点值。解其他超越方程只需要修改fc中的返回值。#include<stdio.h>#include<math.h>#include<iostream>using namespace std;double fc(double x){ return 2*pow(x,2)*pow(sin(原创 2020-11-28 21:15:57 · 496 阅读 · 0 评论 -
【计算机算法】递归——循环日程表
题目设有N个选手进行循环比赛,其中N=2M,要求每名选手要与其他N−1名选手都赛一次,每名选手每天比赛一次,循环赛共进行N−1天,要求每天没有选手轮空。输入格式输入:M(M<=7)。输出格式输出:表格形式的比赛安排表。一行各数据间用一个空格隔开。输入样例3输出样例在这里给出相应的输出。例如:1 2 3 4 5 6 7 82 1 4 3 6 5 8 73 4 1 2 7 8 5 64 3 2 1 8 7 6 55 6 7 8 1 2 3 46 5原创 2020-11-24 21:46:15 · 765 阅读 · 0 评论 -
【计算机算法】递归——棋盘覆盖
题目在一个2k * 2k( k为正整数,k<=10,length=2^k)个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格(其坐标为aa,bb,分别代表行坐标号和列坐标号),以及有四种L型骨牌(如下图)。求用若干块这种L型骨牌实现除该特殊点棋盘的全覆盖。(本题要求采用分治算法做)输入格式输入三个数,分别是aa,bb,length.输出格式输出整个棋盘。其中特殊方格填为0,然后铺棋盘的顺序为:先铺四个子棋盘交界的部分,然后递归的对每个子棋盘按照左上,右上,右原创 2020-11-23 20:32:51 · 1436 阅读 · 0 评论 -
【计算机算法】递归——分形的递归输出
题目分形,具有以非整数维形式充填空间的形态特征。通常被定义为“一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状”,即具有自相似的性质。一个盒状分形定义如下: 度为1的盒分形为:X度为2的盒分形为:输入格式输入一系列度,每行给出一个不大于7的正整数。输入的最后一行以-1表示输入结束输出格式对于每个用例,输出用’X’标记的盒状分形。在每个测试用例后输出包含一个短划线“-”的一行。输入样例1234-1输出样例:注意:每行的空原创 2020-11-22 21:44:06 · 284 阅读 · 0 评论 -
【计算机算法】递归——二分查找及改写二分查找
这几天一直在PTA上写算法题,人笨,二分查找写了很久,记录一下。以下算法是基于递归的二分查找//递归算法,前面提交虽然正确,但不是递归,之前一直错在(start-end)/2的地方,应该是(start+end)/2!!!//对于二分查找理解有误,二分查找必须是一个按照大小关系排列好的序列来使用 #include<iostream>using namespace std;#define N 1000int erfen(int start,int end,int array[],int原创 2020-11-20 22:01:10 · 1390 阅读 · 0 评论 -
【计算机算法】递归——递归实现逆序输出整数
题目本题目要求读入1个正整数n,然后编写递归函数reverse(int n)实现将该正整数逆序输出。输入格式输入在一行中给出1个正整数n。输出格式对每一组输入,在一行中输出n的逆序数。输入样例12345输出样例54321我的实现如下,虽然比起来dalao们的代码确实长一些,带详细解析#include<iostream>#include<math.h>using namespace std;int reverse(int n,int ar原创 2020-11-19 21:38:44 · 5936 阅读 · 0 评论 -
【计算机算法】递推——海盗分金币
题目有5个海盗,相约进行一次帆船比赛。比赛中天气发生突变,他们被冲散了。恰巧,他们都先后经过途中的一个无名的荒岛,并且每个人都信心满满,觉得自己是第一个经过该岛的人。第一个人在沙滩上发现了一堆金币。他把金币分成5等份。发现刚好少一个金币。他就从自己口袋拿出一个金币补充进去,然后把属于自己的那份拿走。第二个到达的人也看到了金币,他也和第一个人一样,把所有金币5等分,发现刚好缺少一个金币,于是自己补进去一个,拿走了属于自己的那份。第三,第四,第五人的情况一模一样。等他们到了目的地,都原创 2020-11-18 21:37:52 · 464 阅读 · 0 评论 -
【计算机算法】枚举——换硬币
题目将一笔零钱换成5分、2分和1分的硬币,要求每种硬币至少有一枚,有几种不同的换法?输入格式输入在一行中给出待换的零钱数额x∈(8,100)。输出格式要求按5分、2分和1分硬币的数量依次从大到小的顺序,输出各种换法。每行输出一种换法,格式为:“fen5:5分硬币数量,fen2:2分硬币数量, fen1:1分硬币数量, total:硬币总数量”。最后一行输出“count = 换法个数”。输入样例13输出样例fen5:2, fen2:1, fen1:1, total:4f原创 2020-11-11 19:14:56 · 661 阅读 · 0 评论 -
【计算机算法】STL——办事大厅排队
题目在郑州大学综合办事大厅,每天陆陆续续有很多人来排队办事。现在你能否写程序帮助老师时刻了解当前办理业务的情况。输入格式第一行一个数字N,表示排队信息或者查询信息条目的数量。以下N行,每行的内容有以下3种情况(1) in name 表示名字为name的人员新来到办事大厅,排在队伍的最后。(in和name间存在一个空格,name是名字对应字符串,长度不超过10)。(2) out 表示当前排在最前面的人已经办理完业务,离开了。(3) q 表示一次查询,请输出当前正在办理业务的人,也就是队伍的原创 2020-11-10 21:52:57 · 397 阅读 · 0 评论 -
【算法】BFS广度优先搜索解决经典迷宫问题
使用BFS广度优先搜索算法的应用解决走迷宫问题#include<bits/stdc++.h>using namespace std;int array[100][100],v[100][100];struct point{ int x; int y; int step;};//定义方向数组 int dx[4] = {0,1,0,-1};//四个方向,右下左上 int dy[4] = {1,0,-1,0};queue<point> r;//开拓一个point类原创 2020-09-19 23:31:13 · 411 阅读 · 0 评论