算法
文章平均质量分 67
lj_suxin
这个作者很懒,什么都没留下…
展开
-
用回溯法求1, 2, ..., n的全排列
用回溯法求解n个数的全排列,测试了回溯前清零语句的多个不同的位置,发现一般情况下,清零语句只要放在被调用函数语句之后即可。原创 2023-05-23 09:41:45 · 252 阅读 · 0 评论 -
有n个数排成一圈,现在要从中找出连续的一段数串,使得这串数的和最大。
要解决该题,需弄清楚最大字段和的来源。 假设用数组a[n]来存储圈中的数据,则最大字段和序列只可能是以下两种情况:I) ai, ai+1, ..., aj, 0<=i<=j<=nii) ai, ai+1, ...,an-1, a0, a1, ..., aj, 1<=i<=n-1, 0<=j<n-1方法一:对于情况i),直接用第七章给出的动态规划方法解即可;对于情况ii),分别求以an-1和 a0为起始元素的最大子段和,在二者的子段和的和...原创 2021-06-19 11:09:54 · 2141 阅读 · 0 评论 -
n个数中取r个数的非递归回溯实现
#include"stdio.h"#include"stdlib.h"#include"string.h"int count=0;//the first methodvoid comb(int n, int r, int a[]){ int i, ri; ri=1; a[1]=n+1; while (a[1]>r-1) { a[ri]=a[ri]-1; if (ri+a[ri]>=r+1) if (ri==r) ...原创 2021-06-17 12:58:53 · 198 阅读 · 0 评论 -
n×m的方格,m为奇数,放置有n×m个数, 要求找到一条从底到顶的路径,使其数相加之和为最大
在一个n×m的方格中,m为奇数,放置有n×m个数,如下图(a)所示。方格中间的下方有一人,此人可按照5个方向前进但不能越出方格,如下图(b)所示。人每走过一个方格必须取此方格中的数。要求找到一条从底到顶的路径,使其数相加之和为最大。输出最大和的值。解题思想: 采用动态规划方法。类似于数塔问题,从下到上求出每个方格到起始点(人的出发位置)的最大距离。用数组a[n]保存同一行各节点到起始点的最远距离,a[j]表示某一行的第j个方格到起始点的最远距离,0<=j<n。数组b[n]保存同一行的所有方格原创 2020-06-30 12:02:35 · 2376 阅读 · 0 评论 -
最佳浏览路线问题
最佳浏览路线问题。某旅游区的街道成网格状(如右图),其中东西向的街道都是旅游街,南北向的街道都是林荫道。由于游客众多,旅游街被规定为单行道。游客在旅游街上只能从西向东走,在林荫道上既可以由南向北走,也可以从北向南走。阿隆想到这个旅游区游玩。他的好友阿福给了他一些建议,用分值表示所有旅游街相邻两个路口之间的道路浏览的必要程度,分值从-100到100的整数,所有林荫道不打分。所有分值不可能全是负值。阿隆可以从任一路口开始浏览,在任一路口结束浏览。请写一个算法,帮助阿隆寻找一条最佳的浏览...原创 2020-06-08 19:55:48 · 741 阅读 · 0 评论 -
最大字段和问题
#include"stdio.h"#include"stdlib.h"#include"string.h"void optimalpath(int b[], int n){ int begin=0, left, right, maxsum=0, temp=0; for (int i=0; i<n; i++) //求数列b的最大字段和 { if (temp>0) temp+=b[i]; else ...原创 2020-06-08 19:52:29 · 201 阅读 · 0 评论 -
蜂房问题-蜜蜂在蜂房中只能向下或者右上方爬,从a位置爬到b位置有多少种途径
蜂房问题-蜜蜂在蜂房中只能向下或者右上方爬,从a位置爬到b位置有多少种途径(0<a<b<1000)解题思路:蜜蜂要从a到b,可以先从a到b-1或者从a到b-2。记从a到b有beehouse(a, b)条途径,则有beehouse(a, b)=beehouse(a, b-1)+beehouse(a, b-2).#include"stdio.h"#include"stdlib.h"#include"string.h"int beehouse(int a, int b).原创 2020-06-07 20:30:17 · 1629 阅读 · 0 评论 -
ABCXYZ比赛对打
甲队A,B,C,乙队X,Y,Z。A!=X, C!=X, C!=Z。#include"stdio.h"#include"stdlib.h"#include"string.h"void PK(){ int a, b, c; for (a=1; a<=3; a++) if (a!=1) for (b=1; b<=3; b++) for (c=1; c<=3; c++) ...原创 2020-06-07 14:02:18 · 872 阅读 · 0 评论 -
狼找兔子问题
一座山周围有n个洞,顺时针编号为0,1,2,..., n-1。一只狼从0号洞开始,顺时针方向计数,每当经过第m个洞时,就进洞找兔子。例如n=5, m=3,狼经过的洞依次为0,3,1,4,2,0。输入m,n。试问兔子有没有幸免的机会?如果有该藏在哪儿?分析:若n=6, m=3,则狼经过的洞依次为0,3,0,兔子有幸免机会,应藏在1,2,4,5号洞中的一个洞即可。若n=6,m=5, 则狼经过的洞依次为0,5,4,3, 2, 1, 兔子没有幸免机会。当n和m的最大公约数大于1时,兔子有幸免机会。兔子可原创 2020-06-07 13:29:10 · 2295 阅读 · 1 评论 -
判断分数m/n是有限小数还是循环小数
题目:读入自然数m和n(0<=m<n<=1000),判断分数m/n是有限小数还是循环小数解题思想: 循环小数必定会出现余数相同的情况,有限小数不可能出现余数相同的情况//0<=m<n<=1000,m/n#include"stdio.h" #include"stdlib.h"#include"string.h"#include"time.h"void array_n(int m, int n ){ int b[1000]={0}, b1[100...原创 2020-05-24 10:14:06 · 2412 阅读 · 1 评论 -
求2+22+222+...+(n个2)的精确值
解题思想:按照从低位到高位的顺序,把各个被加数的位上的数值相加并加上比该位更低位向该位的进位,取余求出该位上的余数,取整求出该位像比它高一位的进位。重复上述步骤,直至求出和的所有位。方法一:#include"stdio.h"#include"stdlib.h"#include"string.h"int count=0;void sum1(int n ){ int s[n]={0}, sum1[n]={0}; //数组s存储被加数,sum1存储和 int i, d, ...原创 2020-05-24 09:56:04 · 1510 阅读 · 0 评论 -
删数问题
问题:输入高精度正整数 n ,去掉其中任意 s 个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的 n 和 s,寻找一种方案使得剩下的数字组成的新数最小。输出去掉数字的位置和新的正整数。贪婪原理:位数固定时,高位越小则值越小,尽可能删除较大的高位数字。删除原则:将相邻两位比较,若高位比低位大,则删除高位。被删除数的原位置= 它在新数中的位置 + 它向前移动的次数删除...原创 2019-05-15 20:43:59 · 3274 阅读 · 0 评论 -
关于贪心算法
关于贪心算法,有个问题一个让我很纠结:贪心算法并不能保证得到原问题的最优解。但又要求同时具有贪心选择性质和最优子结构性质的问题才能用贪心算法来解,可是一旦一个问题具有这两个性质,得到的解就是最优解。然后,我就不明白了,为什么“贪心算法并不能保证得到原问题的最优解”。今天终于在另外一本书上看到了相关的说明。《算法设计与分析》 张军等 清华大学出版社“那么对于什么样的问题,贪心算原创 2015-11-02 20:32:38 · 1194 阅读 · 0 评论 -
深度优先搜索与广度优先搜索
http://blog.csdn.net/andyelvis/article/details/1728378深度优先搜索与广度优先搜索分类: 数据结构与算法2007-08-06 13:16 22680人阅读 评论(13) 收藏 举报class算法graphinsertjava有两种常用的方法可用来搜索图:即转载 2015-11-15 17:42:57 · 347 阅读 · 0 评论 -
“求一列数中的第二小的数”
问题:求一列数中的第二小的数方法:分治法,二分法,每次保留最小的两个数据现在遇到了一些问题,请各位大神帮忙解下疑惑。#include #include #include float a[100];void two (int i, int j, float &fmin2, float &fmin1){ float lm翻译 2015-10-24 23:18:34 · 1174 阅读 · 0 评论 -
贪婪算法--去掉 n 位正整数中的 s 位
键盘输入一个高精度的正整数 n,去掉其中任意 s 个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n 和 s,寻找一种方案使得剩下的数字组成的新数最小。怎么样根据贪婪策略删除数字呢?总目标是删除高位较大的数字,具体的,相邻两位比较若高位比低位大,则删除高位。C 代码如下:#include #include #include vo翻译 2015-10-24 15:38:26 · 1387 阅读 · 0 评论 -
二分法求解数列中最小的数
#include #include int count=0;int Merge(int a,int b){ int c; if (a return a; else return b; }int MergeSort(int r[],int r1[],int s,int t)原创 2015-10-23 17:02:48 · 446 阅读 · 0 评论 -
求x, 使x的平方为一个各位数字互不相同的9位数
求x,使x的平方为一个各位数字#include 以下程序在测试时,出错了,想请教下#include #include //#define N 3//int main( )int main( ){ //system("CLS"); //int b0,b1,i,j,n,k,m,tt; int a[10]; for原创 2015-11-07 17:02:50 · 2231 阅读 · 0 评论 -
乘法填空---18个X均是素数
/* XXX * XX XXXX XXXX XXXXX18个X均是素数 */#include #include int main( ){int i, j, k, s, s1, s2, s3, t, m, n, x, y, h, count, count1;//int i, j, k, s, s1, s原创 2015-10-16 13:21:06 · 2984 阅读 · 0 评论