9.26<立方网>技术笔试题

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

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

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

三、关于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。spa

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

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"; }
相关文章
相关标签/搜索