欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    常用简单算法与技巧c++版.docx

    • 资源ID:23609568       资源大小:29.74KB        全文页数:25页
    • 资源格式: DOCX        下载积分:10金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    常用简单算法与技巧c++版.docx

    1、常用简单算法与技巧c+版简单算法列表:1、两个数的值的交换借用第三个变量来实现cinab;c=a;a=b;b=c;不借用第三个变量的方法cinab;a=a+b;b=a-b;a=a-b;2、小数位数的处理#include /调用格式库coutfixedsetprecision(2)a;b=a%10;c=a/10%10;d=a/100%10;e=a/1000;如果是输入一个不知道位数的整数,要将其倒序输出cina;b=0;for(;a!=0;) b=b*10+a%10; /将a数的个位取出来累加到b中 a=a/10; /将a的个位去掉couta;if(a%7=0) cout”yes”;else c

    2、outa;if(a%2=0) cout”偶数”;else coutn;j=0; /计数器初值一般为0for(i=1;ia; if(a%2=0) j=j+1; /每次用自身加上1再赋给自身,即j+couta;s=s+a; /将新数加上自身再赋给自身cinn;s=0;for(i=1;ia; s=s+a;couta;s=s*a; /将新数乘上自身在赋给自身cinn;s=1;for(i=1;ia; s=s*a;coutn; f=1; /用f做标记,为1则表示是素数 for( j=2;jn;j+ ) if(n%j=0) f=0; /f为0,则表示n在2n-1之间有一个约数 if(f=1) cout”ye

    3、s”; else couta;max=a;for(i=1;ia; if(amax) max=a;10、求最小值先假设输入的第一个数即为最小数,然后用它去和后面的数一一进行比较,如果后面的数比它小,则将小的数交换给它。cina;min=a;for(i=1;ia; if(aa; a!=.;) if(a=a&a=A&a=0&aa;输入一串小写字母,以” . “号结束,输出字母所对应的数字,规定a对应数字1,b对应数字2,z对应数字26,输出的数字间以空格隔开。for( cina; a!=.;) if(a=a&a=z) n=a-a+1; coutna;/字母类型的数字要转为对应的整数可以采取同样的办法

    4、,/ int n; char a; cina; n=a-0; 空格的处理cin命令做输入时会自动跳过空格和回车等符号,如果要求对空格进行处理则需要用到cin.get(a); 也可以用scanf(“%c”, &a); 但不能用cina;12、数学函数库有一些标准数学函数在信息奥赛中是允许使用的,使用时要加上数学函数库#includedouble a,b,c,d;cinab;c=sqrt(a); /sqrt为求平方根函数d=pow(a,b); /pow为求ab的函数,求平方可以用它,注意它的参数为实数类型13、求最大公约数求两自然数m , n的最大公约数。最大公约数:能同时被m和n整除的最大数。如

    5、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程序代码: cinmn; for(r=m%n;r!=0;r=m%n) m=n;n=r; coutmn; for(i=n;i0;i-) if(m%i=0&n%i=0) coutmn; for(t=m;m%n!=0;m=m+t); coutab;for(i=1;ia;i+) /鸡可能为1a-1只 for(j=1;ja;j+) /

    6、兔可能为1a-1只 if(i+j=a&i*2+j*4=b) couti jn;a1=1;a2=1;for(i=3; i=n; i+) a3=a1+a2; a1=a2; a2=a3;coutn;s=1;for(i=2;i=n;i+) s=(s+1)*2;couts;17、文件的处理方法#includeusing namespace std;ifstream fin(“输入文件名”);ofstream fout(“输出文件名”);例:陶陶摘苹果(文件名:apple.cpp)【问题描述】陶陶家的院子里有一棵苹果树,每到秋天树上就会结出10个苹果。苹果成熟的时候,陶陶就会跑去摘苹果。陶陶有个30厘米高

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

    8、能够摘到的苹果的数目。【样例输入】110100 200 150 140 129 134 167 198 200 111【样例输出】5#includeusing namespace std;ifstream fin(apple.in);ofstream fout(apple.out);int main() int rg,sg,i,j=0; finrg; for(i=0;isg; if(sg=rg+30) j+; foutmn;for( i=0;im;i+ ) /外循环通常用作控制行,表示输出图形有m行 for( j=0;jn;j+ ) /内循环通常用作列,表示一行上有多少列字符 cout*; c

    9、outendl; 外循环i=0时,内循环j从0一直变化到n-1,即内循环中的语句 cout*; 被执行了n次,语句 coutendl; 是外循环中的语句,执行1次。当外循环的i值变化到m退出时,内循环中的语句 coutn;for( i=0;in;i+ ) for( j=0;j=i;j+ ) cout*; coutn;for( i=1;i=n;i+ ) for( j=1;j=2*i-1;j+ )/每行上的字符以2递增,因此是2*i cout*; coutn;for( i=1;i=n;i+ ) for(j=1;j=n-i;j+) /每行上的空格数是n-1,n-2,.,1,0这样一个递减序列,而i每

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

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

    12、 for(D=0;D2;D+) if(A+B+C+D=1&(A!=1)+(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四位同学打碎玻璃和没有打碎玻璃的所有情况,加上判断就可以确定到底是谁打碎了玻璃。也可以用其他方法来做,尝试一下。【例】有四个学生对我国四大淡水湖排列次序如下: 甲: 洞庭湖最大,洪泽湖最小,鄱阳湖第三。 乙: 洞庭湖最小,洪泽湖最大,鄱阳湖第二,太湖第三 。 丙: 洞庭湖第三,洪泽湖最小。 丁: 洪泽湖第二,鄱阳湖最大,太湖最小

    13、。每人都只说对了一个,试编程排出正确次序。分析:用 d、h、p、t 分别表示洞庭湖、洪泽湖、鄱阳湖、太湖。 四个湖泊的顺序号只能是 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;h5;h+) for(p=1;p5;p+) for(t=1;t5;t+) if(d!=h)&(d!=p)&(d!=

    14、t)& (h!=p)&(h!=t)&(p!=t)& (d=1)+(h=4)+(p=3)=1& (d=4)+(h=1)+(p=2)+(t=3)=1& (d=3)+(h=4)=1& (h=2)+(p=1)+(t=4)=1) coutdong ting hu is:dendl; couthong ze hu is:hendl; coutpo yang hu is:pendl; couttai hu is:tendl; 程序写得稍嫌复杂,实际上可以简便一些。 for(d=1;d5;d+) for(h=1;h5;h+) if(d!=h) for(p=1;p5;p+) if(p!=h&p!=d) t=10

    15、-d-h-p; if(d=1)+(h=4)+(p=3)=1) if(d=4)+(h=1)+(p=2)+(t=3)=1) if(d=3)+(h=4)=1) if(h=2)+(p=1)+(t=4)=1) coutdong ting hu is:dendl; couthong ze hu is:hendl; coutpo yang hu is:pendl; couttai hu is:tendl; 循环减少一个,表达式分开写,看起来要清晰些。练习: (1)某年级数学竞赛中,、五位同学获得前五名。说:“是第一,是第四”;说:“是第一,是第二”;说:“是第二,是第三”;说:“是第三,是第五”;说:“是第

    16、二,是第四”。每人都只说对了一个,试编程排出正确次序。 (2)甲、乙、丙三位同学中有一人趁大家不在教室的时候把教室打扫干净了。事后老师问是谁做的好事。甲说:“是乙做的”,乙说:“不是我”,丙说:“不是我”。三个人当中只有一个人说真话,试判断哪一位做了好事?(3)有红、黄、蓝、白四色球各一个,放置在编号为1、2、3、4四个格子的盒中,每个格子中只能放一个小球,他们的顺序不知。甲、乙、丙三人猜测的顺序如下:甲说:蓝色球编号为1,黄色球编号为2;乙说:蓝色球编号为2,白色球编号为3;丙说:红色球编号为2,白色球编号为4。结果证明三个人各猜中一半。问四个格子的盒中放置小球情况。一维数组讲解与练习一、为

    17、什么要使用数组学到现在,我们用分支结构解决了计算机的智能判断问题,用循环充分利用了计算机处理速度快的特点,也可以用循环对大量数据进行处理,但这些数据却无法大量保存,在这点上还没有利用上计算机存储容量大的特点。在程序语言中有一种数据结构可以解决这个问题,那就是数组。例1、输入1000个学生的某门课程的成绩,打印出低于平均分的同学号数与成绩。分析:在解决这个问题时,虽然可以通过读入一个数就累加一个数的办法来求学生的总分,进而求出平均分。但因为只有读入最后一个学生的分数以后才能求得平均分,且要打印出低于平均分的同学,故必须把1000个学生的成绩都保留下来, 然后逐个和平均分比较,把高于平均分的成绩打

    18、印出来。如果,用简单变量a1,a2,,a1000存放这些数据,可想而知程序要很长且繁。要想如数学中使用下标变量ai形式表示这1000个数,则可以引入下标变量ai。这样问题的程序可写为:tot=0; /tot表示总分for(i=1;iai;tot:=tot+ai;ave=tot/1000; /计算平均分for( i=1;i=1000;i+)if (aiave) cout”No.”i:ai; /如果第i个同学成绩小于平均分,则将其输出而要在程序中使用下标变量,则必须先说明这些下标变量的整体数组,即数组是若干个同名(如上面的下标变量的名字都为a)下标变量的集合。二、一维数组1、一维数组的定义和引用当

    19、数组中每个元素只带有一个下标时,我们称这样的数组为一维数组。数组是同一类型的一组值(10个 char 、15个 int) ,在内存中顺序存放。整个数组共用一个名字,而其中的每一项又称为一个元素。1)定义方式:类型说明符 数组名常量表达式;int a4; / int是数组元素的类型说明,4表示元素个数,a表示数组名称,整个说明表明a数组由4个int型元素组成,这四个元素分别是:a0, a1, a2, a3要注意的两个地方:其序号从0开始,而不是从1开始。所以int a4;实际上不包含a4这个元素C+不允许对数组的大小作动态的定义,即数组的大小不能是变量,必须是常量。即不能定义为int an; 只

    20、能是int a1000;等,即元素个数必须是确定的。2)一维数组元素的引用数组必须先定义,具体引用时(赋值、运算、输出)其元素等同于变量。数组元素的赋值与输出通常采用的是循环。例2、输入100个数,将其倒序输出。int main( ) int i, a100; for ( i=0; iai; for ( i=99; i=0 ; i-) coutai=3) int main( ) int i; int f 21;f1=1;f2=1; for (i=2 ; i21 ; i+ ) f i=f i-1+f i-2; for ( i=1; i21; i+) coutf i”t”; if (i%5= =0) cout“n”; 例4、输入十个正整数,把这十个数按由大到小的顺序排列。将数据按一定顺序排列称为排序,排序的算法有很多,其中选择排序是一种较简单的方法。分析:要把十个数按从大到小顺序排列,则排完后,第一个数最大,第二个数次大,。因此,我们第一步可将第


    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

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

    收起
    展开