最新C++常用算法归纳.docx
- 文档编号:29910775
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:20
- 大小:20.83KB
最新C++常用算法归纳.docx
《最新C++常用算法归纳.docx》由会员分享,可在线阅读,更多相关《最新C++常用算法归纳.docx(20页珍藏版)》请在冰豆网上搜索。
最新C++常用算法归纳
C++常用算法归纳
一、基本算法
1、两数交换借助第三数
例:
任意读入2个整数,然后按从小到大的顺序输出这两个数。
【法1】
#include
usingnamespacestd;
voidmain()
{inta,b;
cin>>a>>b;
a
cout< cout< } 【法2: 让a中放较小数、b中放较大数】 #include usingnamespacestd; voidmain() {inta,b; cin>>a>>b; intt;//中间变量 a>b? (t=a,a=b,b=t): (a=a,b=b); cout< } 【算法解释: “t=a,a=b,b=t”,即可借助t,将a和b的值交换。 】 2、累加 例: 求1+2+3+……+100的和。 #include usingnamespacestd; voidmain() {ints,i; s=0; i=1; while(i<=100) {s=s+i; i=i+1; } cout<<"1+2+...+100="< } 【分析: 出循环时,i为101,其最后一个合法取值(终值)为100;本题中s被称为累加器,它以“s=s+……”的形式出现在循环中,该式被称为累加式,累加器在进入循环前必须获得合法初值,通常为0。 i是一个特殊的累加器,每次递增1,又称为计数器。 i身兼二职: 控制循环的次数,同时兼做累加式的通项。 】 3、累乘 例.求10! 。 【分析: 10! =1×2×3……×10,累乘器在进入循环前必须获得合适初值;通常为1。 累乘式格式“C=C*……”必须出现在循环中。 注意,不要让累乘器溢出。 】 #include usingnamespacestd; voidmain() {longC; inti; C=1; i=1; while(i<=10) {C=C*i; i++; } cout< } 【思考: 能否将本程序稍做修改,分别输出1! ~10! 】 二、非数值计算常用经典算法 1、穷举法 对所有的可能性进行判断,凡是符合条件的做相应处理(输出、保存等)。 例: 输出所有的“水仙花”数,即这样的三位正整数: 其每一数位上的数字的立方之和等于该数本身。 比如,153=13+53+33。 【法一: 一重循环,难点: 求出每位数字】 #include usingnamespacestd; voidmain() {intsxh; intb,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) cout< } } 【结论: 任意一个正整数的个位数字,都可以用“该数%10”求得! 】 【法二: 三重循环】 #include usingnamespacestd; voidmain() {intb,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) cout< } 【发现: 核心语句if被执行了900次】 2、正整数的各数位上数字的获取 例1: 任意读入一个正整数,依次输出其低位到高位上的每一位数字。 例2: 任意读入一个整数,依次输出其低位到高位上的每一位数字及其符号位,但若是0不输出符号位。 3、迭代法 例1.猴子吃桃问题。 某猴子某天摘了若干只桃子,吃了一半,不过瘾,又多吃一只;第二天又吃了一半,不过瘾,再多吃一只……到第十天,发现只剩1只桃子了。 问第一天共摘了多少只桃子。 #include usingnamespacestd; voidmain() {intpeach,day; peach=1; for(day=9;day>=1;day--) peach=(peach+1)*2; cout<<"第一天的桃子数: "< } 【归纳: 类似于本题peach变量的特点: 其值不停地被新值替代(自身的原值变化而来),直到满足所求终止。 】 【问题: 能否将上述程序稍作修改,输出每一天的桃子数。 】 #include usingnamespacestd; voidmain() {intpeach,day; peach=1; for(day=9;day>=1;day--) {peach=(peach+1)*2; cout<<"第"< "< } 4、排序 (1)冒泡排序法(起泡法) 【算法要领: n个数据最多处理n-1趟,每一趟从头到尾(或从尾到头)两两相邻的元素进行比较,升序排序时,若前者大后者小,则交换两数……,每一趟比前一趟少比较一次。 】 例: 任意读入10个整数,升序排列后输出。 #include usingnamespacestd; voidmain() {constintN=10; inta[N],i,j; for(i=0;i cin>>a[i]; //外循环处理N-1趟,控制趟数 for(j=1;j<=N-1;j++) for(i=0;i<=N-1-j;i++) //内循环控制每趟比较次数 if(a[i]>a[i+1]) {intt; t=a[i];a[i]=a[i+1];a[i+1]=t;}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 C+ 常用 算法 归纳
![提示](https://static.bdocx.com/images/bang_tan.gif)