2015年阿里研发工程师实习笔试选择题

投递了阿里的C/C++方向研发,参加在线笔试时完全懵了,各种数学题、智力题,以及各种看似风马牛不相及的题目在一起,各位感受下.题目中涉及到排列组合 基本数学问题等.下面关于以上部分题目给出自己的意见,如果有不对的地方,希望各位指正.关于数N!有多少个零思路:给定一个整数N,那么N的阶乘N!末尾有多少个0的问题可以转换为N!乘式中可以分解出多少个5的问题.因为5和其前面的任何一个偶数相乘都会产生0,所以只需求出在由1到N的数中共可以分解出多少个5.例如25!,可以分解出5(1×5)、10(2×5),15(3×5),20(4×5)25(5×5),共可以分解出6个5,所以25!末尾有6个0;

由此可以推知15!最后有3个0…

当然特殊的情况需要注意,比如数字是100,1000这样的情况,还有50,500这样的情况,楼主稍加思考不难得出正确的结论。

例如10!=10×9×8×7×6×5×4×3×2×1=2×5×9×8×7×6×5×4×3×2×1(含2个5,所以结果末尾有两个0)

/* Name: n!.cppCopyright: 52coder.net Author: HeHe.wang Date: 03-04-15 10:58 Description: 程序用户确定N!(n的阶乘结果有多少个0) */#include<stdio.h>int ZeroNum(int n){int j,num=0;for(int i=n;i>1;i–){j=i;while(j%5==0){num++;j/=5;}}return num;}int main(){int n=100; printf("%d",ZeroNum(n)); }

问题二:0-999999中任何一位都不包含数字1的数字个数:看到这题第一遍我就在百度、google,不过没有任何发现,我想现在如果在百度的话应该会有发现.一开始我写了下面的程序求0-999999中任何一位都不包含数字1的数字个数我的思路是求出0-999999含有1的个数,然后999999减去含有1的数字因为计算是从0-999999,所以最后计算的时候是n+1-count实际上使用排列组合更简单9×9×9×9×9×9=531441

#include <stdio.h> int count(int n) {while(n!=0){if(n%10==1)return 1;n/=10;}return 0;}int main() {int icount=0;int n;scanf("%d",&n);for(int i=0;i<=n;i++){icount+=count(i);}printf("%d\n", n+1-icount);}其余的几道题排列组合相对比较简单,真正考c/c++的题不多,我居然没想到把代码复制到编译器里运行一遍,,而是自己运算,我还是太单纯了呀.欢迎各位留言讨论,指出有错的地方.

在乎的是看风景的心情,旅行不会因为美丽的风景终止。

2015年阿里研发工程师实习笔试选择题

相关文章:

你感兴趣的文章:

标签云: