多益網絡2013校園招聘第二輪筆試題目

                 前幾天去參加了多益的校園招聘,年薪10W的程序員待遇讓一幫程序員屌絲感到甚是激動,第一輪筆試難度一般,看看網上的c、c++題目基本就差不多了,還有兩個思維題目。

思維題目一有20張上下表面光滑的撲克牌,其中有8張向上,要求你閉着眼睛且不借助任何工具把這20張撲克牌分成兩堆,使得每堆向上的撲克牌的數目一樣多


 

思維題目二:把一個鈍角三角形如何切割成最少數量的銳角三角形?

答案已經有人給出了,題目二我是沒看出什麼門道,不會~~~~(>_<)~~~~

 

說下多益網絡第二輪二筆的題目

 

1。二叉排序樹的問題

           第一題看到我就暈了,完全沒有準備啊,二叉排序樹的概念都忘記了,貌似是在樹上找一個節點,使得  (節點左孩子值+右孩子值)/ 2 最小 不記得是不是這樣了。

 

2。第二題:

有一串瑪瑙項鍊,項鍊上面有N個瑪瑙珠子,這些瑪瑙有M (M < = 9) 種不同的顏色,購買的時候可以只選擇購買項鍊的一段。現在有個苦逼的找不到工作的程序員想花最少的錢買到顏色最多的一段項鍊,(搜索項鍊環),

要求時間複雜度O(n),空間複雜度O(1).

 

#include <stdio.h>  
#include <stdlib.h>  
   
#define M 4	//顏色數

#define N 11	//項鍊珠數

int manao[N] ={1,2,1,2,3,2,4,2,3,4,1};

/******************************
	判斷顏色是否存在
******************************/
int isAll(int l,int h)
{
	int col[M] = {0};
	int i = 0;
	for( i = l ; i <= h; i++)
	{
		col[manao[i]-1] = 1;
	}

	for( i = 0 ; i < M; i++)
	{
		if( col[i] == 0)
			return 0;
	}
	return 1;
}

int GetMinManao()
{
	int l,h;	//{1,2,1,2,3,2,4,2,3,4,1};
	int count = N,ol=0,oh=0;
	for(h = l = 0 ; h < N &&  l < N ;)
	{
		if( isAll(l,h) )
		{
			if(count > h - l)
			{
				count = h - l +1;
				ol = l;
				oh = h;
			}
			l++;
		}
		else
		   h++;
	}

	for(int i = ol  ; i <= oh ;i++)
	{
		printf("%d ",manao[i]);
	}

	printf("  count = %d ",count);

	return 1;
}
   
int main()
{
	GetMinManao();
}


 3。第三題可就坑爹了,書本後面的題目啊,經典的ACM題目裏面的,

輸入一個整型數組,數組裏有正數也有負數。
       數組中連續的一個或多個整數組成一個子數組,每個子數組都有一個和。
       求所有子數組的和的最大值。要求時間複雜度爲O(n)。

       例如:輸入的數組爲1, -2, 3, 10, -4, 7, 2, -5,和最大的子數組爲3, 10, -4, 7, 2,
       因此輸出爲該子數組的和18。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章