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"; }
相關文章
相關標籤/搜索