您的位置:首页 > 其它

2014届华为校园招聘机试题2

2013-09-16 10:42 330 查看
第一题、输入一个正整数,并编码为字符串进行输出

描述: 1、输入一个正整数,并编码为字符串进行输出。

编码规则为:数字0-9分别编码为字符a-j

2、输入肯定是正整数,不用做错误较验

运行时间限制: 无限制

内存限制: 无限制

输入: 正整数

输出: 字符串

样例输入: 123

样例输出: bcd

答案提示: 编写一个main函数实现该功能算法。

void numberToLetter(char* inputStr , char* outputStr){
int len = strlen(inputStr);
int i = 0;
for(i = 0 ; i < len ; ++i){
outputStr[i] = inputStr[i] - '0' + 'a';
}
outputStr[i] = '\0';

}


第二题、计算最后一个出列者的编号

描述: 现在有n个竞争者围坐一圈,争夺一个很有吸引力的工作(年薪100w $)。假设这些人编号1,2,。。。,n。第一次从1开始报数,数到m(m>0)的那个人出列,它的下一位又从1开始报数,数到m的那个人又出列。以此类推,直到所有人出列为止。老板说最后一个出列的人将获得这份工作。

如果你也想竞争这份工作,那么你会坐着哪个位置上?

实现一个函数,当老板告诉你n和m时,返回得到工作的那个人的编号。

运行时间限制: 无限制

内存限制: 无限制

输入: 竞争者人数,报数

输出: 最后出列的竞争者的编号。异常则返回 -1。

样例输入: 10,10

样例输出: 8

答案提示: 约瑟夫环或者数组

第三题、条件表达式求值

描述: 给定一个以字符串形式表示的算术表达式,计算该表达式的值。

表达式支持如下运算:“+、-、*、/”,其中“*”和“/”的优先级要高于“+”和“-”;

不需要考虑括号,且表达式之间没有空格;

例如:对于表达式"3-2+15*2",该表达式值为31.

运行时间限制: 60 Sec

内存限制: 256 MByte

输入: 加减乘除四则运算表达式,长度不超过1024字节,运算式中不含有括号和空格。

输出: 表达式的运算结果。

样例输入: 3-2+15*2

样例输出: 31

答案提示: 2个栈

void cal(char * a){
int len = strlen(a);
stack<int> s1;
stack<char> s2;
int k = 0;
int sum =0;
int sum1 = 0;
int count =0;
while(k <= len){
if(a[k] <= '9' && a[k] >= '0'){
sum = 0;
while(a[k]<= '9' && a[k] >= '0' ){
sum = sum * 10 + a[k] - '0';
++k;
}
s1.push(sum);
}else{
if(!s2.empty()){
if(s2.top() == '*'){
s2.pop();
int number1 = s1.top();
s1.pop();
int number2 = s1.top();
s1.pop();
int tt = 0;
tt = number2 * number1;
s1.push(tt);
}else if(s2.top() == '/'){
s2.pop();
int number1 = s1.top();
s1.pop();
int number2 = s1.top();
s1.pop();
int tt = 0;
tt = number2 / number1;
s1.push(tt);
}
}
if(k != len){
s2.push(a[k]);

}
++k;
}
}

sum1 = s1.top();
s1.pop();
char ch;
int temp;
while(!s2.empty()){
ch = s2.top();
temp = s1.top();
s1.pop();
s2.pop();
if(ch == '+'){
sum1 = temp + sum1;
}else if(ch == '-'){
sum1 = temp - sum1;
}
}
cout<<sum1<<endl;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: