论坛首页 招聘求职论坛

创新工场笔试小记

浏览 17207 次
精华帖 (2) :: 良好帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-09-24  
1+6=7
2+5=7
3+4=7

如果是4个色子我毫不犹豫选14.。但是5个,不知道
0 请登录后投票
   发表时间:2010-09-24  
ywz1984 写道
建议我们成立一个数学与编程的圈子,大家遇到类似的数学问题,我们通过编程方式实现出来。锻炼这样理论和实际相结合,有可以提高算法知识,同时也锻炼了思维逻辑。
大家说好不?

统一,你建一个呗,或者我建也行,不过没建过,还要研究一下怎么建。
0 请登录后投票
   发表时间:2010-09-25  
vaneng 写道
1. 4, 这个程序就是求二进制数中1的个数
2. 组合数学里面的东西,好像叫形式幂级数,
   (x^1+x^2+...+x^6)^5 求x^14, 15, 17 20的系数
3. 0x5248, char 应该先变int
4. 最后一题算是比较有意思的一道题目。
以前见过5升 3升 求2升,不过从来没有考虑过广义的解法
刚才算了半个多小时,算是把思路理清楚了。

假设m>n, k随意。求出k=k%n, a=m,n的最大公因子,if k%a!=0 无解

否则,for(i: 1-n) 存在i,m*i%n=k%n

装水的方法就是先将m倒进n,n满倒掉,知道n不满,将n倒进c; 进行i次
将c里面倒n,n满倒掉,知道n不满,将n倒入c
再将n装满k/n次倒入c中即可。

(就是密码学里面的质数那块的知识)



写的不错,第一道题肯定是对的,后面不知所云
0 请登录后投票
   发表时间:2010-09-25  
dxiao2 写道
我觉得第二个问题从期望的角度出发 应该是17.5 所以选17最接近

正解!
先算第个骰子的期望值,每面的概率都是1/6,单个骰子的期望为
1*1/6 + 2*1/6 + 3*1/6 + 4*1/6 + 5*1/6 + 6*1/6 = 3.5
5个骰子分别随机就是3.5*5=17.5,17或18为最接近的点数
0 请登录后投票
   发表时间:2010-09-26  
长大做IT 写道
dxiao2 写道
我觉得第二个问题从期望的角度出发 应该是17.5 所以选17最接近

正解!
先算第个骰子的期望值,每面的概率都是1/6,单个骰子的期望为
1*1/6 + 2*1/6 + 3*1/6 + 4*1/6 + 5*1/6 + 6*1/6 = 3.5
5个骰子分别随机就是3.5*5=17.5,17或18为最接近的点数


那3个10面的骰子求和呢?,以上公式就不适用了吧
0 请登录后投票
   发表时间:2010-09-26  
能做出这题的人就会创新了?
0 请登录后投票
   发表时间:2010-09-26  
我一个都不会!不知道考这个题能显示出来什么
0 请登录后投票
   发表时间:2010-09-26  
2.c=0x5248
4.倒水有两种方式,直接方式,间接方式。直接-两步,间接-三步。
e.g. M=3, N=1, K=2 --->
直接方式:
(0, 1, 0)
(0, 0, 1)
(0, 1, 1)
(0, 0, 2)
间接方式:
(3, 0, 0)
(2, 1, 0)
(0, 0, 2)
本质上是M*x + N*y + (M-N)*z = K,求x,y,z的正整数解,优化方程为使2*x+2*y+3*z最小。

public class TestLinear {
    //xCo*x + yCo*y + zCo*z = right
    public static void linearEquation(int M, int N,int right)
    {
        int xCo = M > N ? M : N; 
        int yCo = M < N ? M : N; 
        int zCo = xCo - yCo;
        int times = Integer.MAX_VALUE;
        int xResult=0, yResult=0, zResult=0;
        boolean isFound = false;
        for(int i=0; i*xCo<=right; i++)
        {
            for(int j=0; i*xCo+j*yCo<=right; j++)
            {
                for(int k=0; i*xCo+j*yCo+k*zCo<=right; k++)
                {
                    if(xCo*i + yCo*j + zCo*k == right) {
                        int t = 2*xCo + 2*yCo + 3*zCo;
                        if(t < times) {//To Make the time minimal
                            isFound = true;
                            xResult = i;
                            yResult = j;
                            zResult = k;
                        }
                    }                   
                }
            }
        }
        
        if(!isFound) {
            System.out.println("Nope.");
            return;
        }
        
        System.out.println(xResult);
        System.out.println(yResult);
        System.out.println(zResult);
        
        System.out.println("Begin:");
        
        int size = 0;
        for(int i=0; i<xResult; i++)
        {
            p(xCo, 0, size);
            size += xCo;
            p(0, 0, size);
        }
        for(int i=0; i<yResult; i++)
        {
            p(0, yCo, size);
            size += yCo;
            p(0, 0, size);
        }
        for(int i=0; i<zResult; i++)
        {
            p(xCo, 0, size);
            p(xCo-yCo, yCo, size);
            size += (xCo - yCo);
            p(0, 0, size);
        }
    }
    
    public static void p(int x, int y, int z)
    {
        System.out.println("(" + x + "," + y + "," + z + ")");
    }
    
    public static void main(String[] args)
    {
        linearEquation(5, 3, 17);
    }
}
0 请登录后投票
   发表时间:2010-09-26  
piao_bo_yi 写道
2.c=0x5248
4.倒水有两种方式,直接方式,间接方式。直接-两步,间接-三步。
e.g. M=3, N=1, K=2 --->
直接方式:
(0, 1, 0)
(0, 0, 1)
(0, 1, 1)
(0, 0, 2)
间接方式:
(3, 0, 0)
(2, 1, 0)
(0, 0, 2)
本质上是M*x + N*y + (M-N)*z = K,求x,y,z的正整数解,优化方程为使2*x+2*y+3*z最小。

public class TestLinear {
    //xCo*x + yCo*y + zCo*z = right
    public static void linearEquation(int M, int N,int right)
    {
        int xCo = M > N ? M : N; 
        int yCo = M < N ? M : N; 
        int zCo = xCo - yCo;
        int times = Integer.MAX_VALUE;
        int xResult=0, yResult=0, zResult=0;
        boolean isFound = false;
        for(int i=0; i*xCo<=right; i++)
        {
            for(int j=0; i*xCo+j*yCo<=right; j++)
            {
                for(int k=0; i*xCo+j*yCo+k*zCo<=right; k++)
                {
                    if(xCo*i + yCo*j + zCo*k == right) {
                        int t = 2*xCo + 2*yCo + 3*zCo;
                        if(t < times) {//To Make the time minimal
                            isFound = true;
                            xResult = i;
                            yResult = j;
                            zResult = k;
                        }
                    }                   
                }
            }
        }
        
        if(!isFound) {
            System.out.println("Nope.");
            return;
        }
        
        System.out.println(xResult);
        System.out.println(yResult);
        System.out.println(zResult);
        
        System.out.println("Begin:");
        
        int size = 0;
        for(int i=0; i<xResult; i++)
        {
            p(xCo, 0, size);
            size += xCo;
            p(0, 0, size);
        }
        for(int i=0; i<yResult; i++)
        {
            p(0, yCo, size);
            size += yCo;
            p(0, 0, size);
        }
        for(int i=0; i<zResult; i++)
        {
            p(xCo, 0, size);
            p(xCo-yCo, yCo, size);
            size += (xCo - yCo);
            p(0, 0, size);
        }
    }
    
    public static void p(int x, int y, int z)
    {
        System.out.println("(" + x + "," + y + "," + z + ")");
    }
    
    public static void main(String[] args)
    {
        linearEquation(5, 3, 17);
    }
}

第四题思路对的,没看代码。请问一下:优化方程为使2*x+2*y+3*z最小?这个优化方程从何而来?
0 请登录后投票
   发表时间:2010-09-27   最后修改:2010-09-27
直接倒水需要两步,间接倒水需要三步。z表示间接倒水次数。
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics