2014华为校招 重邮机试 2013.9.14 第一场
2014-08-19 15:52
204 查看
题目来源:http://download.csdn.net/detail/zhou20071801/6276543
第一题:
第二题:
第三题:
总结:第1题水题,第2题典型约瑟夫环问题,第三题标准解法应该是使用 数据结构教材上讲的 栈 + 后缀表达式。
这里给出第三题自己的一种拙劣解法,如有问题望大家不吝指正,代码如下:
测试用例:
3-2+15*2
3-2+2*3*4/8
2*3+10-5*2
1+2+3*4+5-6/6+7*8
测试输出:
31
4
6
75
第一题:
第二题:
第三题:
总结:第1题水题,第2题典型约瑟夫环问题,第三题标准解法应该是使用 数据结构教材上讲的 栈 + 后缀表达式。
这里给出第三题自己的一种拙劣解法,如有问题望大家不吝指正,代码如下:
#include<iostream> #include<cstdio> #include<cstdlib> #include<cstring> #include<cmath> #include<vector> #include<list> #include<stack> #include<queue> #include<string> #include<algorithm> using namespace std; typedef enum{ status_L_operand, status_R_operand, status_operator, }STATUS; typedef enum{ LEVEL_LOW, LEVEL_HIGH, }LEVEL; stack<int> sOperand; stack<char> sOperator; void calcOnce(void){ int num_r = sOperand.top(); sOperand.pop(); int num_l = sOperand.top(); sOperand.pop(); char operation = sOperator.top(); sOperator.pop(); int result=0; switch(operation){ case '+': result = num_l + num_r; break; case '-': result = num_l - num_r; break; case '*': result = num_l * num_r; break; case '/': if(num_r==0) break; result = num_l / num_r; break; } sOperand.push(result); } int main(){ #ifndef ONLINE_JUDGE freopen("testCase-3.txt","r",stdin); #endif char buffer[2048]; while(scanf("%s",buffer)!=EOF){ int len= strlen(buffer); int i=0; STATUS status = status_L_operand; LEVEL level = LEVEL_LOW; // int num=0; while(i<len){ num = 0; switch(status){ case status_L_operand: while(buffer[i]>='0'&&buffer[i]<='9'){ num = num*10+(buffer[i] - '0'); i++; } sOperand.push(num); status= status_operator; break; case status_operator: switch(buffer[i]){ case '+': case '-': level = LEVEL_LOW; sOperator.push(buffer[i]); break; case '*': case '/': level = LEVEL_HIGH; sOperator.push(buffer[i]); break; } status = status_R_operand; i++; break; case status_R_operand: while(buffer[i]>='0'&&buffer[i]<='9'){ num = num*10+(buffer[i] - '0'); i++; } sOperand.push(num); //status= status_operator; if(level == LEVEL_HIGH){ if((buffer[i]!='*'&&buffer[i]!='/')){ while(sOperator.size()) calcOnce(); } else calcOnce(); } else if((level == LEVEL_LOW)&&( buffer[i]!='*'&&buffer[i]!='/')){ calcOnce(); } status = status_operator; break; } } int result = sOperand.top(); sOperand.pop(); printf("%d\n",result); } fclose(stdin); return 0; }
测试用例:
3-2+15*2
3-2+2*3*4/8
2*3+10-5*2
1+2+3*4+5-6/6+7*8
测试输出:
31
4
6
75
相关文章推荐
- 2014华为校招 重邮机试 2013.9.14 第二场
- 2014华为校招 重邮机试 2013.9.15 第三场
- 华为2014校招机试题
- [置顶] 华为2014校招机试
- 2014华为校招机试题-车辆调度
- 华为2014校招面试经验杂谈
- 2014 华为校招机试题(c/c++开发类)
- 2014华为校招机试高级题——if语法中的括号判断
- 2014-- 华为校招
- 地铁换乘—华为2014校招机试样题 —Dijkstra 和 Floyd-Warshall 算法解决
- 2014 华为校招题 消除重复字符
- 【机试】华为2014校招机试:多线程循环打印十次ABC
- 2014华为校招机试题目总结
- 2014 华为校招机试题(c/c++开发类)
- HDU 2516 取石子游戏 (斐波那契博弈)---华为2014校招机试第三题
- 【2014校招】华为南研所机试
- 取石子游戏 (斐波那契博弈)---华为2014校招机试第三题
- 2014华为校招实习生机试样题【part 2】
- 2014九月十月百度,迅雷,华为,阿里巴巴,最新校招笔试面试题
- 华为2012秋季校招机试题-数组奇偶交叉重组(题目源自网络)