您的位置:首页 > 其它

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

2013-09-17 16:42 381 查看
http://blog.csdn.net/chenkai619/article/details/11723933


第一题、输入一个正整数,并编码为字符串进行输出 

描述: 1、输入一个正整数,并编码为字符串进行输出。
编码规则为:数字0-9分别编码为字符a-j
2、输入肯定是正整数,不用做错误较验
 
运行时间限制: 无限制 
内存限制: 无限制 
输入: 正整数
 
输出: 字符串
 
样例输入: 123 
样例输出: bcd 
答案提示: 编写一个main函数实现该功能算法。 

[cpp]
view plaincopyprint?

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';  
  
}  

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个栈

[cpp]
view plaincopyprint?

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;  
  
}  

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;

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