首页 > 代码库 > 2014年6月6日--华为机试

2014年6月6日--华为机试

       准备了还有一段时间了,结果还是悲剧了,主要准备的是算法,结果华为机试更看重字符串的操作,这一块正好是自己的弱项,哎。不过还有时间,这几个月多刷刷题,多锻炼锻炼,加油吧。

       机试一共考了三道题,两道简单点的,一道难题,难题考得是状态机,不知道是什么东西╮(╯▽╰)╭,简单的两题做的也不好,回来在重新做一下。

      1.倒置英文句子中单词的字母顺序。

       hello, I am good.  ->  olleh, I ma doog.

       这题其实不难,当时脑子有点纠结符号,所以没做出来,还有一点客观原因,平时用的VS2010,到那里用的VC,硬是用的不舒服,算了不找理由了,可以参考博文<实例>C++ 将一句话里的单词进行倒置,标点符号不倒换。就是把第一个翻转省略,第二个翻转修改一下即可。

#include <iostream>
using namespace std;

int main()  
{    
	int i = 0;
	int begin, end;
	char str[] = "hello, I am good.";
	cout<<"原字符串为:    "<<str<<endl;

	char temp;
	while( str[i] !=NULL )
	{
		if( str[i]!=' '&& str[i] !=',' && str[i]!='.' )
		{
			begin = i;
			while(str[i]!=' '&& str[i] !=',' && str[i]!='.'&&str[i]!=NULL)
			{
				i++;
			}
			end = i-1;
		}

		while(end>begin)
		{
			temp = str[begin];
			str[begin] = str[end];
			str[end] = temp;
			end--;
			begin++;
		}

		i++;
	}
	cout<<"反转后字符串为:";
	cout<<str<<endl;
	
	return 0;
}<span style="font-family: Arial, Helvetica, sans-serif;">  </span>

       2.实现“十七进制”转“十进制”算法。

       这个题好做,不过我觉得自己的方法有点笨,不知道有没有巧妙的方法。

       注意:1字符串长度可以用strlen直接求得,2子函数中临时数组需要动态创建,3乘方是double pow(double x,int y),我当时一上去就来个^符号,现在想想真是太无知了。

#include <iostream>
#include <string.h>
#include <math.h>
using namespace std;

int change(char str[])
{

	const int length = strlen(str);
	int *tmp = new int[length];   //动态数组
	
	for( int i=0; i<length; i++ )
	{
		switch (str[i])
		{
			case '1': tmp[i] = 1; break;
			case '2': tmp[i] = 2; break;
			case '3': tmp[i] = 3; break;
			case '4': tmp[i] = 4; break;
			case '5': tmp[i] = 5; break;
			case '6': tmp[i] = 6; break;
			case '7': tmp[i] = 7; break;
			case '8': tmp[i] = 8; break;
			case '9': tmp[i] = 9; break;
			case 'A': tmp[i] =10; break;
			case 'B': tmp[i] =11; break;
			case 'C': tmp[i] =12; break;
			case 'D': tmp[i] =13; break;
			case 'E': tmp[i] =14; break;
			case 'F': tmp[i] =15; break;
			case 'G': tmp[i] =16; break;
		}
	}
	
	int num = 0; 
	for(int i=0; i<length; i++ )
	{
		num = num +tmp[i]*pow(17.0,length-i-1);
	}
	 return num;
}
int main()  
{    
	char str[]="ABC";
	cout<<"十七进制数据"<<str<<"的十进制表示为:"<<change(str)<<endl;
	
	return 0;
}  

    A=10

       AB = 10*17+11 = 181

     1BC = 1*17^2+11*17+12 = 488