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()void FuncB()
{
cout<<"A\t";
}
{
cout<<"B\t";
}void FuncC()
{
cout<<"C\t";
}