[置頂]どこへ行くネット2014筆記試験のアルゴリズムの問題のまとめ


1.相対パスを絶対パスに変換する関数を書きます.たとえば、/home/abs/../temp/new/../,出力パスは:/home/tempです.
参照コード:
//     ,           ,  :/home/abs/../temp/new/../,     :/home/temp。
int RP2AP(const char* pInStr, char* pOutStr)
{
	if (pInStr==NULL || pOutStr==NULL) return 0;

	string str = pInStr;
	string strTemp;
	vector<string> vec_str;
	string strOut="";

	int nPos1;
	int nPos2;

	nPos1 = str.find("/", 0);
	if (nPos1<0)
	{
		return -1;
	}

	while(1)
	{
		nPos2 = str.find("/", nPos1+1);
		if (nPos2>nPos1)
		{
			strTemp = str.substr(nPos1, nPos2-nPos1);
			//    /..,   vector 
			if (strTemp!="/..")
				vec_str.push_back(strTemp);
			else//     
			{
				vec_str.reserve(vec_str.size());
				vec_str.pop_back();
				vec_str.reserve(vec_str.size());
			}
			nPos1 = nPos2;
		}
		else
		{
			break;
		}
	}

	//      
	for (int i=0; i<vec_str.size(); i++)
	{
		strOut +=vec_str[i];
	}
	
	//   strOut.c_str(),     ,             。
	memcpy(pOutStr, strOut.c_str(), strOut.size());

	return 1;
}

int main()    
{    
    int n = 10;       
	//char a[] = "/home/abs/../temp/new/../";
	char a[] = "/home/abs/temp/new/../"; 

	char b[256];
	
	memset(b, 0, 256);
	int nRet = RP2AP(a, b);

	if (nRet ==1 )
		cout << b << endl;

    system("pause");    
    return 0;    
} 

2.1つの10*10の行列(碁盤と理解できる)は、いつでも1組のデータ埋め込み行列を生成し、いずれかの位置の数字は4を除いて計算し、残数で着色し、残数は0でredに着色し、1はblue、2はgreen、3はblackであり、4中の色の駒を生成して碁盤に入れると理解でき、その中に同色の五星連珠が存在する場合(ルール通五子棋)任意の組を探し出し,5個の駒の位置下標値を出力する.
3.
2つのファイルがあります.txtとwords.conf、それらをテキストに統合して印刷してみてください.
この2つのファイルの内容は次のとおりです.
context.txt
「誰もが自分の食糧を必要としているわけではありません.$(flight.1)誰もが自分の服を作る必要があります$(flight.2)、私たちは他の人が発明した$(hotel)、他の人が発明した数学を使って......私たちはずっと$(tuan)他の人の成果を使っています.人間の経験と知識$(travel.1)を使って行うのは、$(travel.2)のことです」
word.conf
flight=服でもない
クナー=栽培
hotel=言語
tuan=使用
travel=発明創造:とても起きられない
4.
1つのファイルには10万個のランダム正の整数があり、次のルールに従って新しいデータを組み合わせることができます.
A.現在の数字が3で割り切れる場合、ファイル内のすべての数字(自分を含む)と2つ加算して、自分の位置に代わる数字のセットを生成します.
B.3で割り切れない場合は、2を乗じて、自分の位置に代わる数字を生成するだけです.
たとえば、[3,7,6]は[6,10,9,14,9,13,12]を組み合わせます.
さらに,[5,12,9,6,2]は,[10,17,24,21,18,14,14,21,18,15,11,18,15,12,8,4]を組み合わせている.
 
プログラムを書いて新しいデータの最小200の数字を見つけて印刷します.最適化アルゴリズムの複雑さを考慮してください.
5.アルファベットシーケンス【d,g,e,c,f,b,o,a】が知られているので、入力された文字列のセットinput[]={"bed","dog","dear","eye"}に対して、アルファベット順にソートして印刷してください.
この例の出力順序はdear,dog,eye,bedである.
6.1万人の北京の独身男女があなたに基本的な資料を提出しました.名前、性別、年齢、星座を含めて、プログラムを書いて彼らの最も一致するペアを見つけようとしました.
転載はオリジナルリンクを明記してください:http://blog.csdn.net/wujunokay/article/details/12233087