2019年C++常用算法归纳.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C++常用算法归纳 一、基本算法 1、两数交换借助第三数 例:任意读入2个整数,然后按从小到大的顺序输出这两个数。 【法1】 #include iostream using namespace std; void main() {int a,b; cinab; ab?couta,b:coutb,a; } 【法2:让a中放较小数、b中放较大数】 #include iostream using namespace std; void main() {int a,b; cinab; int t; //中间变量 ab?(t=a,a=b,b=t):(a=a,b=b); couta,bendl; } 【算法解释:“t=a,a=b,b=t”,即可借助t,将a和b的值交换。】 2、累加 例:求1+2+3+……+100的和。 #include iostream using namespace std; void main() {int s,i; s=0; i=1; while(i=100) {s=s+i; i=i+1; } cout1+2+...+100=s; } 【分析:出循环时,i为101,其最后一个合法取值(终值)为100;本题中s被称为累加器,它以“s=s+……”的形式出现在循环中,该式被称为累加式,累加器在进入循环前必须获得合法初值,通常为0。i是一个特殊的累加器,每次递增1,又称为计数器。i身兼二职:控制循环的次数,同时兼做累加式的通项。】 3、累乘 例. 求10!。 【分析:10!=1×2×3……×10,累乘器在进入循环前必须获得合适初值;通常为1。累乘式格式“C=C*……”必须出现在循环中。注意,不要让累乘器溢出。】 #include iostream using namespace std; void main() {long C; int i; C=1; i=1; while(i=10) {C=C*i; i++; } coutCendl; } 【思考:能否将本程序稍做修改,分别输出1!~10!】 二、非数值计算常用经典算法 1、穷举法 对所有的可能性进行判断,凡是符合条件的做相应处理(输出、保存等)。 例:输出所有的“水仙花”数,即这样的三位正整数:其每一数位上的数字的立方之和等于该数本身。比如,153=13+53+33。 【法一:一重循环,难点:求出每位数字】 #include iostream using namespace std; void main() {int sxh; int b,s,g; for(sxh=100;sxh=999;sxh++) {b=sxh/100; s=sxh/10%10; g=sxh%10; if(b*b*b+s*s*s+g*g*g==sxh) coutsxhendl; } } 【结论:任意一个正整数的个位数字,都可以用“该数%10”求得!】 【法二:三重循环】 #include iostream using namespace std; void main() {int b,s,g; for(b=1;b=9;b++) //时针 for(s=0;s=9;s++) //分针 for(g=0;g=9;g++) //秒针 if(b*b*b+s*s*s+g*g*g==b*100+s*10+g) coutb*100+s*10+gendl; } 【发现:核心语句if被执行了900次】 2、正整数的各数位上数字的获取 例1:任意读入一个正整数,依次输出其低位到高位上的每一位数字。 例2:任意读入一个整数,依次输出其低位到高位上的每一位数字及其符号位,但若是0不输出符号位。 3、迭代法 例1. 猴子吃桃问题。某猴子某天摘了若干只桃子,吃了一半,不过瘾,又多吃一只;第二天又吃了一半,不过瘾,再多吃一只……到第十天,发现只剩1只桃子了。问第一天共摘了多少只桃子。 #include iostream using namespace std; void main() {int peach,day; peach=1; for(day=9;day=1;day--) peach=(peach+1)*2; cout第一天的桃子数:peach; } 【归纳:类似于本题peach变量的特点:其值不停地被新值替代(自身的原值变化而来),直到满足所求终止。】 【问题:能否将上述程序稍作修改,输出每一天的桃子数。】 #include iostream using namespace std; void main() {int peach,day; peach=1; for(day=9;day=1;day--) {peach=(peach+1)*2;

文档评论(0)

潮起潮落 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档