C++常用算法总结(共21页).doc
《C++常用算法总结(共21页).doc》由会员分享,可在线阅读,更多相关《C++常用算法总结(共21页).doc(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上常用算法总结1分段函数的计算(如数学分段函数、一元二次方程求解, if-else)x11x10x10例1:有一函数:写程序分别求当x=0.5, x=5.975, x=101.25, x=356.75时,y的值。#include void main( )float x,y;cinx;if (x1) y=x*x;else if(x10)y=3*x-2;else y=x*x*x-10*x*x+28;coutx=x,y=yendl;例2:输入系数a、b和c,求ax2+bx+c=0 的解。#include #include void main( ) float a, b, c,
2、 disc, x1, x2, realpart, imagpart; cinabc; coutThe equation; if (fabs(a)=1e-6) / a=0 注意写法 cout is not quadraticn;else / 处理后三种情况 disc=b*b-4*a*c;if (fabs(disc)=1e-6) / disc=0 cout has two equal roots:(-b/(2*a)1e-6) / disc 0 x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);cout has distinct real roots:x
3、1 and x2endl;else / disc 0 realpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);cout has complex roots:n;coutrealpart+imagpartin;coutrealpart-imagpartin; 例1#include main() float a, b, c, disc, x1, x2, realpart, imagpart; scanf(%f,%f,%f, &a, &b, &c); printf(The equation); if (fabs(a)=1e-6) /* a=0 注意写法 */prin
4、tf( is not quadraticn);else /* 处理后三种情况 */ disc=b*b-4*a*c;if (fabs(disc)1e-6)x1=(-b+sqrt(disc)/(2*a);x2=(-b-sqrt(disc)/(2*a);printf( has distinct real roots:%8.4f and %8.4fn ,x1,x2);elserealpart=-b/(2*a);imagpart=sqrt(-disc)/(2*a);printf( has complex roots:n);printf(%8.4f+%8.4f in,realpart,imagpart);
5、 printf(%8.4f-%8.4f in,realpart,imagpart); 2多项式累加和、累乘积(1)根据通项大小结束(2)规定循环次数例1: 求:#include #include void main( )float x, t, sum; int n; cinx; n=1; t=1; sum=0; while( fabs(t)1e-6 )sum += t;n=n+1;t=t*(-1)*x*x/(2*n-3)/(2*n-2); coutcos(x)=sumendl;例2:有一分数序列, 求出这个序列的前20项之和#include void main( ) float a=2,b=1
6、,sum=0,t; int i;for(i=1; i=20;i+)sum+=a/b;t=a; a+=b; b=t;coutsum=sumendl;3求素数例1:将96到100之间的全部偶数分解成两个素数之和#include #include void main( ) int i,j,m,k,n;for ( i=96;i=100;i+=2 )for (m=3;mi/2;m+=2) k=sqrt(m);for (j=2;j=k+1) / m是素数 n=i-m;k=sqrt(n);for(j=2;j=k+1) / n是素数 couti=m+nendl;例2:以下函数:判断 x 是否是素数,若是素数,
7、返回1;若不是素数,返回0。int isprime1(int x) /* 解1 */ int k, i; k=sqrt(x); for(i=2; i=k; i+) if(x%i=0) break; if(i=k+1) return(1); else return(0); int isprime2(int x) /* 解2 */ int k, i; k=sqrt(x); for(i=2; i=k; i+) if(x%i=0) return(0); return(1);4牛顿迭代求a的平方根迭代公式为,要求前后两次求出的x 的差的绝对值小于10-5。#include #include void m
8、ain( )float a,x0,x1;cina;x0=a/2;x1=(x0+a/x0)/2;dox0=x1;x1=(x0+a/x0)/2;while(fabs(x1-x0)=1e-5);coutThe square root of a is x1endl;5求最大公约数、最小公倍数#include int gys(int m, int n) / 用辗转相除法求最大公约数int d, x ,u ;d=mn?m:n;x=mn?m:n;u=d%x;while(u!=0) d=x; x=u; u=d%x; return(x);int gys(int m, int n) / 用辗转相除法求最大公约数的
9、优化算法int r;while(r=m%n)!=0) m=n; n=r; return(n);int gbs(int m, int n) / 求最小公倍数int maxy; maxy=gys(m,n);return(m*n/maxy);int gys(int m, int n) / 根据定义求最大公约数int i,x;x=m=1; i-)if(m%i=0 & n%i=0) break;return(i);int gbs(int m, int n) / 根据定义求最小公倍数int i,d;d=mn?m:n;for(i=d; in)m=m-n;else n=n-m;return(m);void m
10、ain( )int m,n;cinmn;coutgong yue shu:gys(m,n)endl;coutgong bei shu:gbs(m,n)endl;6数的分解(硬性分解、循环分解,如求解水仙花数)例1:任意输入一个不多于五位整数,分别将该数各位数字正向、逆向输出。如输入7632,则输出:ws=47,6,3,22,3,6,7(1)用选择结构实现/* n=k5 k4 k3 k2 k1 ,其中k1表示个位,k2表示十位,其余依此类推 */#include void main( ) long n; int ws, k5, k4, k3, k2, k1;cinn;if(n10) ws=1;e
11、lse if(n100) ws=2;else if(n1000) ws=3;else if(n10000) ws=4;else ws=5;coutws=wsendl;switch(ws) case 5: k5=n/10000; n=n%10000; coutk5,;case 4: k4=n/1000; n=n%1000; coutk4,;case 3: k3=n/100; n=n%100; coutk3,;case 2: k2=n/10; n=n%10; coutk2,;case 1: k1=n; coutk1n; switch(ws) case 1: coutk1endl; break;ca
12、se 2: coutk1,k2endl; break;case 3: coutk1,k2,k3endl; break;case 4: coutk1,k2,k3,k4endl; break;case 5: coutk1,k2,k3,k4,k5endl; break;(2)使用数组和循环实现(循环分解到数组元素中,优点:n的位数不限)#include void main( ) long n; int a5, i=0, k;cinn;while(n0) ai=n%10;n=n/10;i+; coutws=i=0; k-) coutak;coutn;for(k=0; ki; k+) coutak;co
13、utn;(3)用递归实现(优点:n的位数不限)#include void printz(long); /函数原型说明void printd (long); /函数原型说明void main( ) long num;cinnum;printz(num);coutn;printd(num);cout0)printz(n/10);cout0)coutn%10;printd(n/10); 例2:打印出所有的“水仙花数”。(1)分解数字#include #include void main( )int i,a,b,c; /* a百位,b十位,c个位 */for(i=100; i1000; i+)a=i/
14、100; b=i/10%10; c=i%10;if(a*a*a+b*b*b+c*c*c=i)coutsetw(10)i;coutendl;(2)穷举法,三重循环#include void main( ) int i,j,k; /* i百位,j十位,k个位 */for(i=1; i10; i+) for(j=0; j10; j+)for(k=0; k10; k+)if( i*i*i+j*j*j+k*k*k = i*100+j*10+k )coutijkendl;7数的合并(类似于乘权求和)例1: 已知 int a10, k i, n; 数组a中有k个值,分别是一个十进制整数的各位数字,将其合并成
15、一个整数n,算法如下:n=0;for(i=0; ik; i+) n = n*10 + ai;例2: 将一个八进制正整数作为字符串输入,如输入字符串“342”,输出其等值的十进制数。#include void main( )char *p,s6; int n=0;cins;for(p=s; *p!=0; p+) n=n*8+*p-0;coutnendl; 例3:写一程序,将一个十六数字符串转换成相应的十进制数。#include int htod(char *); /函数原型说明void main( )char s80;cins;couthtod(s)=0 & si=a & si=f) n = s
16、i-a+10;else n = si-A+10;num = num*16+n;return(num);8一维数组排序(选择法、冒泡法、*插入法(*前插、*后插)例1:将n个整数按由小到大排列#include #include void sort(int a ,int n) / 选择法排序 int i,j,p,t;for(i=0; in-1; i+) p=i;for(j=i+1; jn; j+)if(ajap) p=j;if(p!=i) t=ai; ai=ap; ap=t;void sort(int a ,int n) / 冒泡法排序 int i,j,t;for(i=0; in-1; i+)fo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 常用 算法 总结 21
限制150内