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";
}
posted @ 2014-09-26 22:24  杠上开花  阅读(423)  评论(0编辑  收藏  举报