算法
算法学习
巡山小钻风つ
不沉迷于环境,严于律己,宽以待人
展开
-
c语言宏定义(第一次发博客)
今儿翻以前的书,c语言里的宏定义,总结一下吧!(-_-!)#define的宏定义优点:1. 程序会更易读;2. 程序常量更易与修改;缺点:以我目前水平看写到一些实现一些复杂函数功能,逻辑上不是很好理解;例如:在这里插入代码片#include<stdio.h> #define F(x) x-2#define D(x) x * F(x)int main(){ printf("%d %d \n",D(3),D(D(3))); return 0; } 输出的结果为原创 2020-10-13 22:33:37 · 238 阅读 · 0 评论 -
C语言——递归(一)
递归1.易于描述和理解,证明简单;2.在动态规划、贪心算法、回溯法等中有应用;3.需要注意的是(1)子问题必须和原问题是相同性质,不然就无法再继续递归调下去了;(2)递归调用必须有一个结束的条件,否则递归调用就无法结束了;例题:一、递归求幂;核心代码:if(m==0) return 1;y=power(x,m/2); y=y*y; if(m%2!=0) y=y*x完整代码:#include<stdio.h>double power(double x,in原创 2020-10-22 19:12:58 · 160 阅读 · 0 评论 -
c语言——随机化算法
一、函数srand1.随机化种子 srand((unsigned int)time(NULL)); 若不随机则生成的都为1 相同值2.rand(time(NULL)) 做产生随机数的种子;3.产生随机数 x=(double)rand()/RAND_MAX; rand()后若为/则是随机生成0~1之间的数 若为%则是生成0~RAND_MAX之间的数(RAND_MAX为最大值32767) rand()前为产生的随机数的类型; rand()%n+m;产生m到n之间原创 2020-10-19 20:51:52 · 1423 阅读 · 1 评论 -
关于质数
质数求法两种:一、普通法//普通法判断少量质数#include<stdio.h>bool prime(long long p);int main(){int n,i;long long x;while(EOF){printf("需要判断多少个数!\n") ;scanf("%d",&n);i=0;printf("输入%d个数\n",n) ; while(n--){ scanf("%d",&x); if(prime(x)) ; else原创 2021-01-13 17:58:59 · 100 阅读 · 0 评论 -
卡我?呵呵!
题目:输入一行数字,如果我们把这行数字中的‘5’都看成空格,那么就得到一行用空格分割的若干非负整数(可能有些整数以‘0’开头,这些头部的‘0’应该被忽略掉,除非这个整数就是由若干个‘0’组成的,这时这个整数就是0)。你的任务是:对这些分割得到的整数,依从小到大的顺序排序输出。输入值输入包含多组测试用例,每组输入数据只有一行数字(数字之间没有空格),这行数字的长度不大于1000。输入数据保证:分割得到的非负整数不会大于100000000;输入数据不可能全由‘5’组成。输出量对于每个测试用例,输出原创 2021-01-28 20:50:06 · 150 阅读 · 0 评论 -
全排列(深度优先搜索)
#include<stdio.h>void quanpai(int a[5],int p,int q);void jiaohuan(int a[5],int p,int q);void shuchu(int a[5]){ int i; for(i=0;i<5;i++) printf("%d ",a[i]); printf ("\n");}int main(){ int a[]={1,2,3,4,5}; quanpai(a,0,5); retu原创 2021-04-20 22:04:17 · 103 阅读 · 0 评论 -
队列
队列一、队列分为链队,顺序队二、先入先出三循环队列顺序队:原创 2021-03-08 14:45:33 · 61 阅读 · 0 评论 -
字符串替换
题目:编写一个C程序实现将字符串中的所有"you"替换成"we"Input输入包含多行数据每行数据是一个字符串,长度不超过1000数据以EOF结束Output对于输入的每一行,输出替换后的字符串Sample Inputyou are what you doSample Outputwe are what we do完整代码:#include<stdio.h>#include<string.h>int main(){ char str[1005];原创 2021-02-17 18:27:43 · 200 阅读 · 0 评论 -
进阶 爬格子
有一只经过训练的蜜蜂只能爬向右侧相邻的蜂房,不能反向爬行。请编程计算蜜蜂从蜂房a爬到蜂房b的可能路线数。其中,蜂房的结构如下所示。Input输入数据的第一行是一个整数N,表示测试实例的个数,然后是N 行数据,每行包含两个整数a和b(0<a<b<50)。Output对于每个测试实例,请输出蜜蜂从蜂房a爬到蜂房b的可能路线数,每个实例的输出占一行。Sample Input21 23 6Sample Output13代码#include<stdio.h>原创 2021-02-03 10:03:27 · 253 阅读 · 0 评论 -
BM算法---c语言
思路是 好后缀和坏字符发一起用;分别放入不同的函数中 将x i j指针传入函数,返回位移量;好后缀还需要用到另外新建一个指针j这里用到坏字符规则这里写的是好后缀的过程 当然程序写的时候还得都比较一下好后缀中,y和j比较 再和j-1比较都不相同,若有相同的则把y向后移动一位 再与j-1比较、这里a位移到c下边是因为怕有漏的;一样的,如果有三个字符的好后缀则移动到第二个好后缀下;此处坏字符规则;此处好后缀此时匹配完成;速度非常快;...原创 2020-12-14 22:43:27 · 1137 阅读 · 0 评论 -
简单动态规划——三角找最大值
E - 数塔取数问题一个高度为N的由正整数组成的三角形,从上走到下,求经过的数字和的最大值。每次只能走到下一层相邻的数上,例如从第3层的6向下走,只能走到第4层的2或9上。58 43 6 97 2 9 5例子中的最优方案是:5 + 8 + 6 + 9 = 28Input第1行:N,N为数塔的高度。(2 <= N <= 500) 第2 - N + 1行:每行包括1层数塔的数字,第2行1个数,第3行2个数…第k+1行k个数。数与数之间用空格分隔(0 <= A <= 10原创 2021-02-04 22:02:37 · 359 阅读 · 0 评论 -
走台阶,路线数!,水题;
有一楼梯共M级,刚开始时你在第一级,若每次只能跨上一级或二级,要走上第M级,共有多少种走法?Input输入数据首先包含一个整数N,表示测试实例的个数,然后是N行数据,每行包含一个整数M(1<=M<=40),表示楼梯的级数。Output对于每个测试实例,请输出不同走法的数量Sample Input223Sample Output12#include<stdio.h>int main(){ int i,j,a[47]={0},N,M=43,n; a[1]原创 2021-02-02 18:02:02 · 58 阅读 · 0 评论 -
又坑我? 贪心?
题目某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能超过前一发的高度.某天,雷达捕捉到敌国的导弹来袭.由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹.怎么办呢?多搞几套系统呗!你说说倒蛮容易,成本呢?成本是个大问题啊.所以俺就到这里来求救了,请帮助计算一下最少需要多少套拦截系统.Input输入若干组数据.每组数据包括:导弹总个数(正整数),导弹依此飞来的高度(雷达给出的高度数据是原创 2021-01-30 08:59:55 · 95 阅读 · 0 评论 -
__int64
在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:Input输入数据由多行组成,每行包含一个整数n,表示该测试实例的长方形方格的规格是2×n (0<n<=50)。Output对于每个测试实例,请输出铺放方案的总数,每个实例的输出占一行。Sample Input132Sample Output132#include<stdio.h>int main(){原创 2021-02-03 09:12:02 · 330 阅读 · 0 评论 -
C语言——质数
三种方法求质数:一、原理:每个合数都可以被质数整除;1.把每个求出的质数存放在数组str[]中,2.合数i整除数组中的质数,3.将数组最后的数传给x;4.再让i除x直到除到i-1;5.再把i放入数组中;#include<stdio.h>#include<math.h>#define N 1000void sushu(int str[N]);int main(){ int str[N]={'1'};//将str初始化都为1; sushu(str); re原创 2020-10-20 21:58:39 · 2410 阅读 · 0 评论 -
bfs解题
题目;GeoSurvComp地质勘测公司负责检测地下油藏。GeoSurvComp一次处理一个大矩形区域的土地,并创建一个将土地分成许多正方形图的网格。然后,使用传感设备分别分析每个地块,以确定该地块是否包含油。含有油的地块称为矿穴。如果两个凹坑相邻,则它们是同一油藏的一部分。积油可能很大,可能包含许多凹穴。您的工作是确定网格中包含多少种不同的油藏。输入值输入包含一个或多个网格。每个网格均以包含m和n的行开始,网格中的行和列数由单个空格分隔。如果m = 0,则表示输入结束;否则,输入0。否则为1 <原创 2021-02-02 09:46:24 · 218 阅读 · 0 评论 -
快速幂———转圈游戏
快速幂a的b次方:(n表示最大值(不能超过n)在下面那个题中)int ksm(int a,int b){ int r=1; while(b) { if(b&1)//0&&1-> 0 { r*=a%n; r%=n; } a*=a%n; a%=n; b>>=1;//位运算 二进制除以二 即向右移1位 }原创 2021-03-03 23:14:32 · 184 阅读 · 1 评论 -
钱币兑换问题 多少可能;
钱币兑换问题在一个国家仅有1分,2分,3分硬币,将钱N兑换成硬币有很多种兑法。请你编程序计算出共有多少种兑法。Input每行只有一个正整数N,N小于32768。Output对应每个输入,输出兑换方法数。Sample Input293412553Sample Output71883113137761代码:#include<stdio.h>#include<string.h>#include<stdlib.h>int main(){ in原创 2021-02-05 22:07:28 · 321 阅读 · 0 评论 -
排列
全排列Ray又对数字的列产生了兴趣:现有四张卡片,用这四张卡片能排列出很多不同的4位数,要求按从小到大的顺序输出这些4位数。Input每组数据占一行,代表四张卡片上的数字(0<=数字<=9),如果四张卡片都是0,则输入结束。Output对每组卡片按从小到大的顺序输出所有能由这四张卡片组成的4位数,千位数字相同的在同一行,同一行中每个四位数间用空格分隔。每组输出数据间空一行,最后一组数据后面没有空行。Sample Input1 2 3 41 1 2 30 1 2 30 0原创 2021-03-14 21:21:13 · 91 阅读 · 0 评论 -
汉诺塔
汉诺塔约19世纪末,在欧州的商店中出售一种智力玩具,在一块铜板上有三根杆,最左边的杆上自上而下、由小到大顺序串着由64个圆盘构成的塔。目的是将最左边杆上的盘全部移到右边的杆上,条件是一次只能移动一个盘,且不允许大盘放在小盘的上面。现在我们改变游戏的玩法,不允许直接从最左(右)边移到最右(左)边(每次移动一定是移到中间杆或从中间移出),也不允许大盘放到下盘的上面。Daisy已经做过原来的汉诺塔问题和汉诺塔II,但碰到这个问题时,她想了很久都不能解决,现在请你帮助她。现在有N个圆盘,她至少多少次移动才能把原创 2021-02-04 09:55:46 · 260 阅读 · 0 评论 -
第一次用递归做题,虽然是个水题:哈哈纪念一下!
题目:农夫约翰的农场在最近的一场暴风雨中被水淹没了,这一事实使他的母牛非常害怕水的信息更加恶化了。但是,他的保险代理只会偿还他的款项,具体数额取决于农场中最大的“湖”的大小。该农场被表示为矩形栅格用Ñ(1≤ ñ ≤100)行和中号(1≤中号≤100)的列。网格中的每个单元是干燥或淹没,并准确ķ(1≤ ķ ≤ Ñ ×中号)的细胞被淹没。正如人们所期望的那样,一个湖泊有一个中心单元,其他单元通过共享一条长边(而不是一个角)而与之相连。与中心单元共享长边或与任何连接单元共享长边的任何单元都将成为连接单元,并且原创 2021-01-30 11:04:30 · 203 阅读 · 0 评论 -
找规律题
四边形分割平面用N个四边方形最多可以把平面分成几个区域?Input第一行输入一个整数T,表示数据组数(1<=T<=10000); 第二行输入一个正整数n(1<=n<=1000);Output对于每组数据,请输出结果。Sample Input212Sample Output210代码#include<stdio.h>int a[510][510];int main(){ int N,i,j,n; scanf("%d",&N);原创 2021-02-05 09:47:05 · 163 阅读 · 0 评论 -
动态规划-数塔问题
数塔,从顶层到底层或从底层到顶层,在每一个结点可以选择向左走或是向右走,要求找出一条路径,使路径上的数值和最大。输入描述:输入数塔层数n,再逐行从左到右输入数塔中所存数字。输出描述:输出路径的最大数值和,同时输出所经过的路径。输入样例5912 1510 6 8218 9 519 7 10 4 16输出样例最大数值和为:59所经过的路径为:9->12->10->18->10package dynamic_pla...原创 2021-12-03 10:43:35 · 433 阅读 · 0 评论