这段程序用于计算100的阶乘末尾的零的个数,思路如下:末尾零的个数就代表含有因子10的个数,而10=2*5,所以每一对2和5因子就对应结果末尾的一个零,所以结果末尾的零的个数即为因子2和5的组合的数量,亦即为因子2和5中数量少的一个,很明显因子2的个数比因子5的个数多,所以只需求100以内因子5的个数。
首先计算100以内能被5整除的个数,对应代码:
for(a=5 a<=100 a+=5){
count++
又因为能被25整除的数含有两个因子5,所以还须加1,对应代码:
if(!(a%25)) count++C语言趣味程序百例精解.pdf百度文库里有,写的不错,很精彩。
实体书:
《趣味C程序设计集锦(爱上程序设计)》作为计算机C程序设计的科普读物与学习C语言程序设计的教学参考书,着眼于应用C程序设计求解问题的基本方法与技巧,提高通过C程序设计解决实际问题的能力。《趣味C程序设计集锦(爱上程序设计)》以各类趣题的C程序设计求解为主线,取材注重典型性与趣味性,程序注重结构化与可读性。所精选的趣解包括典型的数值求解、常见的数据处理、有趣的智力游戏、巧妙的模拟探索、新颖的图表创建,大多是引导入门的基础题、常规题,也适当设计少量难度较大的综合题与经典名题,难度适宜,深入浅出。
有两种方法可以实现:1 对数组进行从小到大排序,排序方法任意。
在排序后,数组的第K个元素即为第K小的元素。
2 对于N值较大,K值较小的情况,1中的时间开销偏大。
这时可以用额外的空间开销,来换取更高的效率。
方法为:
a) 开辟一个K个元素的临时空间M;
b) 取数组中的第一个元素,置于M中;
c) 取第二个元素,插入到M中,保证M中是从小到大排序的;
d)对于后续N中的每个元素,均自后向前遍历M,并插入到M对应位置中,保证M有序;
e)如果M中已经有K个元素,那么在插入时,新元素如果比结尾元素更大,则不插入,否则插入到对应位置,原本最后一个元素抛弃;
f)当对N的遍历结束后,存储于M中的,就是K个N中的最小元素的有序序列。此时第K个元素,就是要求的的结果。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)