算法与结构的学习进程.docx

  1. 1、本文档共9页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.1递推算法 递推算法使用步步为营的方法,不断利用已有信息推导新的东西。 -顺推法:是从已知条件才出发,逐步推算出要解决问题的方法。例如:斐波拉契数列 ?逆推法:是从已知结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过 程。 顺推示例:兔子的繁殖过程 从表格中推出3月后每个月的兔子数量是前两个月的数量之和。 #inelude stdio.h #define NUM 13 int main() { int I; long fibLNUM] = (1,1);〃数组前两位赋值为1; for((i=2;iNUM;i++) { fib[i] = fib[i-l]+fib[i-2]; } for(i=0;inum;i++) { printf(“%d 兔子的总数:%d\n,?,i,fib[i]); } getch(); return 0; 逆推实例:银行存款 大学四年每月要能4X 1000,到48月刚好収完,求每月的存款数目 #include stdio.h #define FETCH 1000 #define RATE 0.017 int main() { double corpus[49]; int i; corpus[48]=(double)FETCH; for(i=47;i0;i—) { corpusli]=(corpusli+ 1]+FETCH)/(1 +RATE/12); } for(i=48;i0;i-) printf(u 第%(1 月末本利合计:%.2f\nn,i,corpus[i]); getch(); return 0;HHHH\Tr、vr、vr、vr、vr、vr、vr、vr、vr、vr、vr、yr「「「「「「「「( 書書i} 本本本本本本本本本本本本本本本本MMMMMM核捋, getch(); return 0; HHHH\Tr、vr、vr、vr、vr、vr、vr、vr、vr、vr、vr、yr「「「「「「「「( 書書i} 本本本本本本本本本本本本本本本本MMMMMM核捋, 亠丕丕丕丕丕丕丕丕丕丕丕丕丕丕丕不啓啓啓啓啓啓誌容= 月月月月月月月月月月月月月月月月形形形形形形打打一 543210987654321 0 E/ch PA-PAE/E/E/E/^- 222222111111111198765432 □□1.2枚举(穷举)算法 □ □ 枚举法的本质就是从所有候选答案中取搜索正确的解,使用该算法需要满足两个条件: (1) 可预先确定候选的数量; (2) 候选答案的范围在求解Z前必须由一个确定的集合。 实例:填数游戏 12345 算 X 1 算法描述题 555555 算法描述题 x 算 题题题题题 #includestdio.h int main() intil ,i2,i3,i4,i5; long multi,result; for(订二 l;il=9;il++) for(i2=0;i2=9;i2++) { for(i3=0;i3=9;i3++) { for(i4=0;i4=9;i4++) { for(i5=0;i5=9;i5++) { multi 二订 * 10000+i2* 1000+i3* 100+i4* 10+i5; result=i5* 100000+i5*10000+i5* 1000+i5* 100+i5* 10+i5; if(multi* 订==rcsull) { printf(,,\n%5d%2d%2d%2d%2d\nM,il,i2,i3,i4,i5); printf(nX%5d\nH,il); printf(H \nH); printf(,,%3d%2d%2d%2d%2d\nn,i5,i5,i5,i5,i5); } } getch(); return (); } 结果 1.3递归算法 是一种直接或者问接地调用自身的算法。 程序示例:数制转换 #include stdio.h #include string.h void convto(char *s jnt n,int b) char bit[]二{“0123456789 ABCDEF J; intlen; jf(n==0) strcpy(s,“); return; 〃返回到上次未调用函数的下一行 } convto(s,n/b,b); len=strlen(s); s[len] = bit[n%bj; s[len+l] = \0; 1 void mian() { char s[80]; int i,base,old; 1.4分治算法 使用分治法按照一下步骤: 分解:将要求解的问题划分成若干规模较小的同类问题; 求解:当子问题划分的足够小吋,用简单的方法解决; 合并:将子问题的解逐层合并,即可构成最终的解 1.5贪婪算法 基本思路:从

文档评论(0)

ggkkppp + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档