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

来源:互联网 发布:qt开发的软件 编辑:程序博客网 时间:2024/06/03 17:05

http://blog.csdn.net/chenkai619/article/details/11723933

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


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

[cpp] view plaincopyprint?
  1. void numberToLetter(char* inputStr , char* outputStr){  
  2.     int len = strlen(inputStr);  
  3.     int i = 0;  
  4.     for(i = 0 ; i < len ; ++i){  
  5.         outputStr[i] = inputStr[i] - '0' + 'a';  
  6.     }  
  7.     outputStr[i] = '\0';  
  8.   
  9. }  
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?
  1. void cal(char * a){  
  2.     int len = strlen(a);  
  3.     stack<int> s1;  
  4.     stack<char> s2;  
  5.     int k = 0;  
  6.     int sum =0;  
  7.     int sum1 = 0;  
  8.     int count =0;  
  9.     while(k <= len){  
  10.         if(a[k] <= '9' && a[k] >= '0'){  
  11.                 sum = 0;  
  12.                 while(a[k]<= '9' && a[k] >= '0' ){  
  13.                 sum = sum * 10 + a[k] - '0';  
  14.                 ++k;  
  15.                 }  
  16.                 s1.push(sum);  
  17.         }else{  
  18.             if(!s2.empty()){  
  19.                 if(s2.top() == '*'){  
  20.                     s2.pop();  
  21.                     int number1 = s1.top();  
  22.                     s1.pop();  
  23.                     int number2 = s1.top();  
  24.                     s1.pop();  
  25.                     int tt = 0;  
  26.                     tt = number2 * number1;  
  27.                     s1.push(tt);  
  28.                 }else if(s2.top() == '/'){  
  29.                     s2.pop();  
  30.                     int number1 = s1.top();  
  31.                     s1.pop();  
  32.                     int number2 = s1.top();  
  33.                     s1.pop();  
  34.                     int tt = 0;  
  35.                     tt = number2 / number1;  
  36.                     s1.push(tt);  
  37.                 }  
  38.             }  
  39.             if(k != len){  
  40.                 s2.push(a[k]);  
  41.   
  42.             }  
  43.             ++k;  
  44.         }  
  45.     }  
  46.   
  47.   
  48.     sum1 = s1.top();  
  49.     s1.pop();  
  50.     char ch;  
  51.     int temp;  
  52.     while(!s2.empty()){  
  53.         ch = s2.top();  
  54.         temp = s1.top();  
  55.         s1.pop();  
  56.         s2.pop();  
  57.         if(ch == '+'){  
  58.             sum1 = temp + sum1;  
  59.         }else if(ch == '-'){  
  60.             sum1 = temp - sum1;  
  61.         }  
  62.     }  
  63.     cout<<sum1<<endl;  
  64.   
  65. }  
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;}


原创粉丝点击