C语言趣味程序的一个问题

C语言趣味程序的一个问题,第1张

     这段程序用于计算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个元素,就是要求的的结果。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11325496.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存