C++常用算法归纳概要1.docVIP

  • 8
  • 0
  • 约8.68千字
  • 约 12页
  • 2017-07-02 发布于湖北
  • 举报
C常用算法归纳概要1

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精品文档

相关文档