准备了还有一段时间了,结果还是悲剧了,主要准备的是算法,结果华为机试更看重字符串的操作,这一块正好是自己的弱项,哎。不过还有时间,这几个月多刷刷题,多锻炼锻炼,加油吧。
机试一共考了三道题,两道简单点的,一道难题,难题考得是状态机,不知道是什么东西╮(╯▽╰)╭,简单的两题做的也不好,回来在重新做一下。
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
2014年6月6日--华为机试
时间: 2024-12-19 15:47:22