1、例 求1!。【分析:!=12310,累乘器在进入循环前必须获得合适初值;通常为1。累乘式格式“C=C”必须出现在循环中。注意,不要让累乘器溢出。#cludin ep st;vid ain()log C; in i;C=1; =1; while(i=10) CC*i; i+; coutusn namespe std;void man()itsh; ib,g;or(sx=;sxh99;sxh+)bsxh/100; =s/%1; g=sxh%10; if(bb*b+s*ssgg*=sx)coutsxedl; 【结论:任意一个正整数的个位数字,都可以用“该数%10”求得!【法二:三重循环】#inlud
2、e usg namepace std;oidmain()t b,s,g; for(b=1;=9;+) /时针f(=0;s=;s) /分针for(g=0;g;g+) /秒针if(b*bb+*g*g=b0+s10+g)cutb*10+s*10+genl;【发现:核心语句f被执行了900次】 、正整数的各数位上数字的获取例1:任意读入一个正整数,依次输出其低位到高位上的每一位数字。例:任意读入一个整数,依次输出其低位到高位上的每一位数字及其符号位,但若是0不输出符号位。、迭代法例1. 猴子吃桃问题。某猴子某天摘了若干只桃子,吃了一半,不过瘾,又多吃一只;第二天又吃了一半,不过瘾,再多吃一只到第十天,
3、发现只剩只桃子了。问第一天共摘了多少只桃子。#includ usi nmespae td;oi ai()int pach,d;pac=; r(ay;da1;day-) ech(peach+1)*2; outusing mespace std;od min()int peach,day; pch=1; for(day=9;dy=1;ay-) ech=(each+1)*2;第dy天的桃子数:peachendl;4、排序 ()冒泡排序法(起泡法)【算法要领:n个数据最多处理-1趟,每一趟从头到尾(或从尾到头)两两相邻的元素进行比较,升序排序时,若前者大后者小,则交换两数,每一趟比前一趟少比较一次。任
4、意读入1个整数,升序排列后输出。#iclude using nampace std;vid min()const int N=1; int aN,i,j; fr(i=;iai; /外循环处理N-1趟,控制趟数 fr(j=1;j=N-1;j+) for(i=0;N-j;i+)/内循环控制每趟比较次数 if(aiai+1) int t; =ai;ai=ai1;a+1t;fo(i=;i;i+) couai ;(2)选择法排序选择法排序是相对好理解的排序算法。假设要对含有n个数的序列进行升序排列,算法步骤是:从数组存放的个数中找出最小数的下标(算法见下面的“求最值”),然后将最小数与第1个数交换位置;
5、除第1个数以外,再从其余n-1个数中找出最小数(即n个数中的次小数)的下标,将此数与第2个数交换位置;重复步骤n-1趟,即可完成所求。任意读入10个数,然后进行升序排列。【主函数读入、调用、输出;子函数排序。#incde osamusg aespae std;vid PX(nt *p,int)/【法1:选择法】int i,j,,; fr(0;-2;i+) k=i; fr(=i+;ji; PX(a,10);/为增大子函数灵活性,将元素个数传过去 for(;i10;) couaendl;/【法:以下冒泡法】#inclde ioseamiclude using nmesace std;vi X(in
6、t p,in)int i,; in t; or(=1;-1;+) for(i=0;=-1-j; if(*(+i)*(p+i+1) t=*(p+i);*(p)=*(p+1); *(p+1);vid main()nt 10,i;for(=0;10;+)ai; PX(a,0); fo(i=0;0; cosw(4)for(i0;N;+)/正常出口出来,i为 if(ai=9)brak; i(i) ct有endl;e cu无en;【小技巧:定义一个逻辑量】#inclue istreamusing nmespace st;oid min()cntint N10; it aN,; bool fl=fals;
7、/先假设无a; o(i0;i+)/正常出口出来,i为N if(ai=9)ltr;beak; if(flag!=fale) out else ousing naesace std;vodan()cons t N10; int aN,; for(=0;;i+)cinai; =0; whe(i=1&i!9)i+; if(i=N-1) cotend; otusn amepac std;v man()int x; do cut1:n; cinx; wie(x=1); int k; fr(=2;=x-1;k+) /穷举的思维 if(%k=0)brea;f(x=k) /判断难点 coutx是素数 cut不是
8、素数n【用一个小技巧:借助一个“逻辑型”变量:“是素数时为tue,否则为false”】#cud sin namespcestd;void main() outn cix; while(xbol flag;flag=true; /首先假设x是素数! fr(k=2;=x1;+)/穷举的思维 if(xk=0) flg=fase;brek;i(lag=tre) cot ls cou不是素数;#includ k=2;ile(k!=0)k+; if(k=) ot是素数n; ee cout不是素数n【变形一:用sqrt函数,求平方根】#ncde cmathuin amespace st;nt,k; ix;
9、ool flag=r; for(k2;=rt(x);k+) if(x%=)fagfase;e; i(fag=tue) cut e ox不是素数n;、插入、删除三、数值计算经典算法:1、辗转相除法求两正整数的最大公约数任意读入个正整数,输出其最大公约数。ncldesng namepacesd;vo ma()it x,,r; d输入0、y: ny; whil(!(x0&y); =y; hile(r!0) xy;y=r;r=x%; cu【改写:用dwhile】#iclud usin nampace sd;voi an()int x,y,r; o ut inxy; whie(!&0); r=y; x=
10、y; y=r; whl(r!=0);2.级数计算(展开式的求解)例1、求+/2!+1/3!+1/n!+,直到某项的值小于0-6为止。直接法(略)】【法二:间接法(递推法)前项/项次=后项】#inclueostreamusing naespace std;fat s,t; it ; 表示项次 s0;t=1;i1; wile(t=1e6) =s+t; i+; t=t/i;coend;例2、读入0x1,计算x+x2+3+xn+直到某项的值小于06为止。直接法:直接利用项次描述通项。nclude#inclue cmathusingamespe td;vo man()flotx,s,t; ini;/能用
11、整数,不用实数cu0=1|x0); i; s00; tx;wil( =1e-6) s=+ t;i+; =pow(,i);、间接法求通项例1、读入x1,计算x2+x3+xn+直到某项的值小于06为止。递推法(间接法)求通项:利用前项求后项。本题中若前一项值为t,则后一项的值为t*】inclde usignamepace std;vod main()fltx,s;do cout0xwhile(x=1|x=0); flatt; /用t表示通项 s=00; t=; wile(1e-6) ss+t; t=t*; ctuing epacest;void mai()in f1,f2,f; f=f2=1;f1
12、 f2 inti;or(=3;=20; f3=f1+f2; f=f; f2=f3; otf3例、编程输出形如上图的等腰三角形(行数灵活读入)。 * * * *#incle =1; int i=1,;/用二重循环完成(循环的嵌套) whi(i=h)/外循环控制行数 f(=;=h-;j)/第一个循环输出每行的空格 or(j;2*1;j+)/第二个循环输出每行的星号 cu*nd; i;4、矩阵转置矩阵转置的算法要领是:将一个m行n列矩阵(即矩阵)的每一行转置成另一个矩阵的相应列。例、将以下23矩阵转置后输出。即将 1 2 3 转置成 4 5 6 2 5 3 6include #icldsing na
13、mespae st;it a,b32,j,k=;or(i;i; fr(j=0;3;j+) aij=k+;/将a转置到b中,穷举 or(0;2;i+)/以a为基准 for(0; bji=ai; r(i0; fr(=0;t(3)bij; coutinclud iomanipuing naepacsd;onst it N=0; it NN,i,; /给主对角线、第一列元素赋值 fr(i;+) a=ai0=1; /以下双循环完成其他元素赋值 or(i2;N1; fo(j=1;=i; aij=i-1-1ai-j; fo(i=0; for(j0;i; outsetw(4)i; utusingnamespce s;vi i()const int N10; intaN,i; nx; fr(i=;i+)cinai; max=a0;/假设第一个获最后一个最大 fr(i1;i+)/其余不服气 f(aimax)max=ai;MAX=axenl;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1