一些算法.ppt
《一些算法.ppt》由会员分享,可在线阅读,更多相关《一些算法.ppt(48页珍藏版)》请在三一办公上搜索。
1、简单题,一个奇异的三位数,一个自然数的七进制表达式是一个三位数,而这个自然数的九进制表示也是一个三位数,且这两个三位数的数码正好相反,求这个三位数。,一个奇异的三位数,*问题分析与算法设计根据题意可知,七进制和九进制表示的这全自然数的每一位一定小于7,可设其七进制数形式为kji(i、j、k的取值分别为16),然后设其九进制表示形式为ijk。,一个奇异的三位数,*程序说明与注释#includeint main()int i,j,k;for(i=1;i7;i+)for(j=0;j7;j+)for(k=1;k7;k+)if(i*9*9+j*9+k=i+j*7+k*7*7)printf(The spe
2、cial number with 3 digits is:);printf(%d%d%d(7)=%d%d%d(9)=%d(10)n,k,j,i,i,j,k,i*9*9+j*9+k);*运行结果The special number with 3 digits is:503(7)=305(9)=248(10),8除不尽的自然数,一个自然数被8除余1,所得的商被8除也余1,再将第二次的商被8除后余7,最后得到一个商为a。又知这个自然数被17除余4,所得的商被17除余15,最后得到一个商是a的2倍。求这个自然数。,8除不尽的自然数,问题分析与算法设计根据题意,可设最后的商为i(i从0开始取值),用逆推
3、法可以列出关系式:(i*8+7)*8)+1)*8+1=(2*i*17)+15)*17+4再用试探法求出商i的值。,8除不尽的自然数,*程序说明与注释#includeint main()int i;for(i=0;i+)/*试探商的值*/if(i*8+7)*8+1)*8+1=(34*i+15)*17+4)/*逆推判断所取得的当前i值是否满足关系式*/*若满足则输出结果*/printf(The required number is:%dn,(34*i+15)*17+4);break;/*退出循环*/*运行结果The required number is:1993,有限5位数,个位数为6且能被3整除
4、的五位数共有多少?,有限5位数,*题目分析与算法设计根据题意可知,满足条件的五位数的选择范围是10006、10016。99996。可设基础数i=1000,通过计算i*10+6即可得到欲选的数(i的变化范围是1000999),再判断该数能否被3整除。,有限5位数,*程序说明与注释#includeint main()long int i;int count=0;/*count:统计满足条件的五位数的个数*/for(i=1000;i9999;i+)if(!(i*10+6)%3)/*判断所选的数能否被3整除*/count+;/*若满足条件则计数*/printf(count=%dn,count);*运行
5、结果count=2999,阶乘尾数零的个数,100!的尾数有多少个零?,阶乘尾数零的个数,问题分析与算法设计可以设想:先求出100!的值,然后数一下末尾有多少个零。事实上,由于计算机所能表示的整数范围有限,这是不可能的。为了解决这个问题,必须首先从数学上分析在100!结果值的末尾产生零的条件。一个整数N若含有一个因子5,则必然会在求N!时产生一个零。因此问题转化为求1到100这100个整数中包含了多少个因子5。若整数N能被25整除,则N包含2个因子5;若整数N能被5整除,则N包含1个因子5。,阶乘尾数零的个数,*程序说明与注释#includeint main()int a,count=0;fo
6、r(a=5;a=100;a+=5)/循环从5开始,以5的倍数为步长,考察整数+count;/若为5的倍数,计数器加1if(!(a%25)+count;/若为25的倍数,计数器再加1printf(The number of 0 in the end of 100!is:%d.n,count);/打印结果return 0;*运行结果The number of 0 in the end of 100!is:24.,阶乘尾数零的个数,*思考题 修改程序中求因子5的数目的算法,使程序可以求出任意N!的末尾有多少个零。,4位反序数,设N是一个四位数,它的9倍恰好是其反序数,求N。反序数就是将整数的数字倒过
7、来形成的整数。例如:1234的反序数是4321。,4位反序数,*问题分析与算法设计可设整数N的千、百、十、个位为i、j、k、l,其取值均为09,则满足关系式:(i*103+j*102+10*k+l)*9=(l*103+k*102+10*j+i)的i、j、k、l即构成N。,4位反序数,*程序说明与注释#includeint main()int i;for(i=1002;i1111;i+)/*穷举四位数可能的值*/if(i%10*1000+i/10%10*100+i/100%10*10+i/1000=i*9)/*判断反序数是否是原整数的9倍*/printf(The number satisfied
8、 stats condition is:%dn,i);/*若是则输出*/*运行结果The number satisfied states condition is:1089,高次方数的尾数,求13的13次方的最后三位数。,高次方数的尾数,*问题分析与算法设计解本题最直接的方法是:将13累乘13次方截取最后三位即可。但是由于计算机所能表示的整数范围有限,用这种“正确”的算法不可能得到正确的结果。事实上,题目仅要求最后三位的值,完全没有必要求13的13次方的完整结果。研究乘法的规律发现:乘积的最后三位的值只与乘数和被乘数的后三位有关,与乘数和被乘数的高位无关。利用这一规律,可以大大简化程序。,高次
9、方数的尾数,*程序说明与注释#includeint main()int i,x,y,last=1;/*变量last保存求X的Y次方过程中的部分乘积的后三位*/printf(Input X and Y(X*Y):);scanf(%d*%d,/*打印结果*/*运行结果Input X and Y(X*Y):13*13The last 3 digits of 13*13 is:253Input X and Y(X*Y):13*20The last 3 digits of 13*20 is:801,求车速,一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右
10、向左读是完全一样的),为95859。两小时后里程表上出现了一个新的对称数。问该车的速度是多少?新的对称数是多少?,求车速,*问题分析与算法设计根据题意,设所求对称数为i,其初值为95589,对其依次递增取值,将i值的每一位分解后与其对称位置上的数进行比较,若每个对称位置上的数皆相等,则可判定i即为所求的对称数。,求车速,*程序说明与注释#includeint main()int t,a5;/*数组a存放分解的数字位*/long int k,i;for(i=95860;i+)/*以95860为初值,循环试探*/for(t=0,k=100000;k=10;t+)/*从高到低分解所取i值的每位数*/
11、*字,依次存放于a0a5中*/at=(i%k)/(k/10);k/=10;if(a0=a4),求车速,*运行结果The new symmetrical number kelometers is:95959.The velocity of the car is:50.00*思考题将一个数的数码倒过来所得到的新数叫原数的反序数。如果一个数等于它的反序数,则称它为对称数。求不超过1993的最大的二进制的对称数。,可逆素数,求四位的可逆素数。可逆素数指:一个素数将其各位数字的顺序倒过来构成的反序数也是素数。,可逆素数,*问题分析与算法设计本题的重点不是判断素数的方法,而是求一个整数的反序数。求反序数的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一些 算法
链接地址:https://www.31ppt.com/p-5490615.html