該公司題目感受不難,算法設計有三道大題。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"; }