该公司题目感受不难,算法设计有三道大题。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"; }