- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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)