2012年 華爲機試題

2012年9月初,華爲就已經開始機試了,在南京這個算最早的了,準備了幾天機試,發現題目不難,但是要考慮多個特例.

舉個例子:給一組整型數,讓你求大於等於平均值的數集合.
乍看一下,題目很簡單,只要求出平均數不就可以了,但是,要注意這個平均數的類型,要用實型,很容易就直接當做int處理了,那麼就錯了;
還有個例子,判斷給定某數是否爲2的冪次,2,8,16這些都是,我們會很想當然的使用!(x&(x-1))來判斷,但是,有沒有想過給定的數要大於0纔有意義?因此,小題才見真功夫。


當天考的3道題,

第一道題是撲克牌的排序,即輸入[A,J,K,Q,2] 輸出[2 A K Q J] ,其中A K Q J 分別用整形數1 13 12 11表示。不難,我先做了過濾將2 和 A 變換爲 15 14 排序好了之後再 過濾回 2 和 A。


第二道題是約瑟夫環,編號1~m的m個人排成一圈,每次按照n報數出列,求最後出列的一個人最初的編號是什麼,不難,但是很多人都沒有看到卷子上有個注意點,當輸入異常,返回-1,因此要判斷m,n是否爲正常輸入。


第三道題是求幾個字符串中的公共子串,如給定string[] .讓你求這些字符串中最長的公共子串,如

string s1="there is a local bus";

string s2="local bus is good for us";
string s3="he is like to go by local bus";


返回local bus


這個給出程序:


#include <iostream>
#include <string>
using namespace std;
string findLCS(const string sa,const string sb);
int main()
{

string s1="there is a local bus";
string s2="local bus is good for us";
string s3="he is like to go by local bus";


cout<<"最長子串"<<findLCS(s3,findLCS(s1,s2))<<endl;
cin.get();
}

string findLCS(const string sa,const string sb)
{
	string temp;
	//默認sa的長度比sb短
	const string *pa=&sa,*pb=&sb;
	if (sa.length()>sb.length())
	{
		pa=&sb;pb=&sa;
	}
	int lena=pa->length();

	for (int i=lena;i>0;i--)
	{
		for (int j=0;j<lena-1;j++)
		{
			if(i+j<=lena)
			{
				temp=pa->substr(j,i);
				int n=pb->find(temp);
				if (n>=0)
					return temp;
			}
		}
	}

}



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