码迷,mamicode.com
首页 > 其他好文 > 详细

2015年阿里研发工程师实习在线笔试题

时间:2015-05-18 10:55:18      阅读:174      评论:0      收藏:0      [点我收藏+]

标签:阿里笔试题

投递了阿里的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!.cpp  
  Copyright: 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年阿里研发工程师实习在线笔试题

标签:阿里笔试题

原文地址:http://blog.csdn.net/persever/article/details/45815669

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!