ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:29.77KB ,
资源ID:22674518      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/22674518.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(c++常用简单算法与技巧Word格式.docx)为本站会员(b****8)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

c++常用简单算法与技巧Word格式.docx

1、 /计数器初值一般为0for(i=1;i if(a%2=0) j=j+1; /每次用自身加上1再赋给自身,即j+j;6、累加器s=0; /累加器的初值一般为0s=s+a; /将新数加上自身再赋给自身 s=s+a;s;7、累乘器s=1; /累乘器的初值一般为1s=s*a; /将新数乘上自身在赋给自身 s=s*a;8、标记法(求素数)输入整数n,请判断其是否为质数。 f=1; /用f做标记,为1则表示是素数 for( j=2;jj+ ) if(n%j=0) f=0; /f为0,则表示n在2n-1之间有一个约数 if(f=1) cout else cout if(amax) max=a;10、求最小

2、值先假设输入的第一个数即为最小数,然后用它去和后面的数一一进行比较,如果后面的数比它小,则将小的数交换给它。min=a; if(a a!=.;=a&a=A&=Z) zimu+;=0&=9) shuzi+;输入一串小写字母,以” . “号结束,输出字母所对应的数字,规定a对应数字1,b对应数字2,z对应数字26,输出的数字间以空格隔开。=z) n=a-a+1; coutn12、数学函数库有一些标准数学函数在信息奥赛中是允许使用的,使用时要加上数学函数库cmathdouble a,b,c,d;c=sqrt(a); /sqrt为求平方根函数d=pow(a,b); /pow为求ab的函数,求平方可以用

3、它,注意它的参数为实数类型13、求最大公约数求两自然数m , n的最大公约数。最大公约数:能同时被m和n整除的最大数。如6和4的最大公约数为21)欧几里德算法(mn)m被n除得到余数r(0r n) r=m%n若r=0,则算法结束,n为最大公约数,否则做3m=n ,n=r ,回到1使用的是循环迭代的方法m=6 n=4 r=m%n=6%4=2m=4 n=2 r=m%n=4%2=0所以,公约数=2程序代码:m for(r=m%n;r!r=m%n) m=n;n=r;2)穷举最大公约数只能是n,n-1,.,2,1中的一个,一一列举出来试一下即可。 for(i=n;i0;i-) if(m%i=0&n%i=

4、0) couti;return(0);虽然两种算法都可以求出最大公约数,但执行效率不同,穷举显然循环次数最多,最费时。比如3000 2002这两个数,用穷举要执行2001次循环,而欧几里德算法只需要4次,算法的优劣一目了然。14、求最小公倍数最小公倍数:能同时整除m和n的最小数。1)已知最大公约数时的方法最小公倍数为两数之积除以最大公约数。接上例4和6的最小公倍数为4*6/2=12。2)直接尝试 for(t=m;m%n!m=m+t);m;将较大数的值放在变量t中,每次用m直接加上t去尝试能否除尽n,如果能,现在的m就是最小公倍数。大多时候还是应该选择使用第一种方法,仍以3000 2002为例,

5、用第一种方法只需要4次循环求出最大公约数,然后求出最小公倍数,而第二种方法要执行上千次才能出结果。15、穷举法穷举法也称为“枚举法”,这种算法基本思想是依题目的部分条件,确定答案的大致范围;在此范围内,对所有可能的情况一一列举,逐一验证,直到全部情况验证完毕,或者得到了需要的结果。若某个情况经验证符合题目的全部条件,则它就是本题的一个答案;若全部情况经验证后,都不符合题目的全部条件,则原题无解。用穷举法解题的大致步骤如下:1)分析题目,确定所要求的解是什么?2)确定解的可能取值范围是什么?3)穷举出所有可能的解4)验证每一个可能的解5)优化例:鸡兔同笼问题一个笼子里有鸡和兔,现在只知道里面一共

6、有a个头,b只脚,问鸡和兔各有多少只(要求鸡和兔至少1只)?int i,j,a,b;i+) /鸡可能为1a-1只 for(j=1;j+) /兔可能为1a-1只 if(i+j=a&i*2+j*4=b) cout endl;16、递推的思想迭代的方法斐波那契数列(从第三项起为前面两项之和)1 1 2 3 5 8 13a1=1;a2=1;for(i=3; iusing namespace std;ifstream fin(“输入文件名”);ofstream fout(“输出文件名”);陶陶摘苹果(文件名:apple.cpp)【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果

7、成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高的板凳,当她不能直接用手摘到苹果的时候,就会踩到板凳上再试试。现在已知10个苹果到地面的高度,以及陶陶把手伸直的时候能够达到的最大高度,请帮陶陶算一下她能够摘到的苹果的数目。假设她碰到苹果,苹果就会掉下来。【输入文件】输入文件apple.in包括两行数据。第一行只包括一个100到120之间(包含100和120)的整数(以厘米为单位),表示陶陶把手伸直的时候能够达到的最大高度。第二行包含10个100到200之间(包括100和200)的整数(以厘米为单位)分别表示10个苹果到地面的高度,两个相邻的整数之间用一个空格隔开。【输出文件】输出文件appl

8、e.out包括一行,这一行只包含一个整数,表示陶陶能够摘到的苹果的数目。【样例输入】110100 200 150 140 129 134 167 198 200 111【样例输出】5ifstream fin(apple.in);ofstream fout(apple.outint main() int rg,sg,i,j=0; finrg; for(i=0;10;sg; if(sg=rg+30) j+; fout多重循环讲解与练习for( ; ; ) 语句组; for( ; 1、图形字符类例1、输出m行n列*号for( i=0;i+ ) /外循环通常用作控制行,表示输出图形有m行 for( j

9、=0;j+ ) /内循环通常用作列,表示一行上有多少列字符*;外循环i=0时,内循环j从0一直变化到n-1,即内循环中的语句 cout 被执行了n次,语句 cout 是外循环中的语句,执行1次。当外循环的i值变化到m退出时,内循环中的语句 cout 一共被执行了mn次。有时每列上的字符个数不同,如例2、n=3时,输出如下图形*i+ )=i;有时每列上的字符个数不向上面图形一般每行以1递增,如例3、n=3时,输出如下图形*for( i=1; for( j=1;=2*i-1;j+ )/每行上的字符以2递增,因此是2*i如果是这样的金字塔形式例4、n=3,输出 *可以看作是先输出了一个倒三角形的空格

10、,然后再输出上例中的图形=n-i;j+) /每行上的空格数是n-1,n-2,.,1,0这样一个递减序列,而i每次递增1,要将一个递增序列改为递减序列,直接在前面加上-号 ;练习:可以尝试打出如下图形:如n=3,要求输出 * * abbbccccc a 2、逻辑推理题目 解逻辑判断与推理题这类题首先要把复杂的逻辑关系进行分析、抽象、化简,然后进行尝试排除,得到最后结果。可以用计算机来验证推断的结果,复杂的还可以直接用逻辑表达式来表示各种关系条件,用计算机穷举各种可能情况, 再根据条件采取累试排除或选择需要的组合。 【例】四位同学不知是哪一位打碎了教室窗户的玻璃,老师问是哪一个同学打的。A 说:“

11、不是我”,B 说:“是 C”,C 说:“是 D”,D 反驳说:“他胡说!”。四个人当中只有一个人说假话,试判断哪一位打碎了教室窗户的玻璃?分析:用A,B,C,D分别表示这四位同学,用1表示打碎了玻璃,0表示没有打碎。 题目中四句话可表示成: A!=1 C=1 D=1 D!A,B,C,D只有一位同学打碎了玻璃,因此A+B+C+D的值为1。逻辑表达式只有1和0两个值,为1表示真,为0表示假,只有一个人说假话,则说明四个表达式的和应为3。 程序如下: for(A=0;A2;A+) for(B=0;BB+) for(C=0;CC+) for(D=0;DD+) if(A+B+C+D=1&(A!=1)+(

12、C=1)+(D=1)+(D!=1)=3) if(A=1) coutA if(B=1) coutB if(C=1) coutC if(D=1) coutD四个循环分别用于穷举A,B,C,D四位同学打碎玻璃和没有打碎玻璃的所有情况,加上判断就可以确定到底是谁打碎了玻璃。也可以用其他方法来做,尝试一下。【例】有四个学生对我国四大淡水湖排列次序如下: 甲: 洞庭湖最大,洪泽湖最小,鄱阳湖第三。 乙: 洞庭湖最小,洪泽湖最大,鄱阳湖第二,太湖第三 。 丙: 洞庭湖第三,洪泽湖最小。 丁: 洪泽湖第二,鄱阳湖最大,太湖最小。每人都只说对了一个,试编程排出正确次序。用 d、h、p、t 分别表示洞庭湖、洪泽湖

13、、鄱阳湖、太湖。 四个湖泊的顺序号只能是 1、2、3、4 的不同组合,所以 d+h+p+t=10。 则四个人的话可表示为: d=1,h=4,p=3 h=1,d=4,p=2,t=3 h=4,d=3 p=1,t=4,h=2,t=3由于每人都只说对了一个,所以上述表示每个人的观点的式子中只有一个真值为 1,其他为 0。程序如下: for(d=1;d5;d+) for(h=1;hh+) for(p=1;pp+) for(t=1;tt+) if(d!=h)&(d!=p)&=t)& (h!(h!(p! (d=1)+(h=4)+(p=3)=1& (d=4)+(h=1)+(p=2)+(t=3)=1& (d=3

14、)+(h=4)=1& (h=2)+(p=1)+(t=4)=1) coutai;tot:=tot+ai;ave=tot/1000; /计算平均分if (aiave) cout”No.”=0 ; i-)ai=3) i; f 21;f1=1;f2=1; for (i=2 ;21 ; i+ ) f i=f i-1+f i-2;for ( i=1;21; i+) f i”t”;if (i%5= =0)“n”;例4、输入十个正整数,把这十个数按由大到小的顺序排列。将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序是一种较简单的方法。要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,。因此,我们第一步可将第

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1