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

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


描述: 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;

}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值