首页 > 代码库 > 9.26<立方网>技术笔试题

9.26<立方网>技术笔试题

该公司题目感觉不难,算法设计有三道大题。

1、设有m和n两个整数,求它们的最大公约数和最小公倍数。

2、猴子分桃问题,每次分桃多一个,共有五个猴子,问最少有多少个桃子。

3、关于java的题目,有A,B,C三个线程, A线程输出A, B线程   输出B, C线程输出C,要求, 同时启动三个线程, 按顺序输出ABC, 循环10次。

第一题:最大公约数可以用辗转相除法,最小公倍数等于m*n/最大公约数。

//最大公约数求法int gcd(int m,int n){    int max,min;    max=m>n?m:n;    min=m<n?m:n;    while (min!=0)    {        int temp=max%min;        max=min;        min=temp;    }    return max;}//最小公倍数int gcdMax(int m,int n){    int temp=gcd(m,n);    int gcdTemp=m*n/temp;    return  gcdTemp;}

第二题:该题可以用从后面递归的算法进行求解,http://blog.csdn.net/a542214712/article/details/812287有明确解法,都是考数学的问题,最少的桃子数为5^n-4,当n为5的时候,结果为3121。

第三题:这题是多线程的问题,考虑到java我本身不太懂,后面用c++简单的实现了一下,分别创建三个线程,然后用WaiForSingleObject函数简单的实现了一下。

DWORD dw;    for(int i=0;i<10;i++)    {        HANDLE h1=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)FuncA,NULL,0,&dw);        WaitForSingleObject(h1,INFINITE);        HANDLE h2=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)FuncB,NULL,0,&dw);        WaitForSingleObject(h2,INFINITE);        HANDLE h3=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)FuncC,NULL,0,&dw);        WaitForSingleObject(h3,INFINITE);        CloseHandle(h1);        CloseHandle(h2);        CloseHandle(h3);
}
void FuncA()
{
        cout<<"A\t";
}
void FuncB()
{
        cout<<"B\t";
}void FuncC()
{
        cout<<"C\t";
}

9.26<立方网>技术笔试题