2014华为校招 重邮机试 2013.9.14 第一场
来源:互联网 发布:做一个java web项目 编辑:程序博客网 时间:2024/06/03 13:59
题目来源:http://download.csdn.net/detail/zhou20071801/6276543
第一题:
第二题:
第三题:
总结:第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
0 0
- 2014华为校招 重邮机试 2013.9.14 第一场
- 2014华为校招 重邮机试 2013.9.14 第二场
- 2014华为校招 重邮机试 2013.9.15 第三场
- 2014-- 华为校招
- 爱奇艺2018秋季校招测试工程师(第一场、第二场、第三场)编程题汇总
- 华为2016校招上机笔试题第一题
- indeed秋招笔试第一场
- 华为2014校招面试经验杂谈
- 华为2018校招
- 2017华为校招粤港澳广州场it应用软件开发(java)面经
- 微软2016校招笔试 第一场部分题目个人思路
- 【爱奇艺2018秋季校招前端工程师(第一场)】 试题回顾
- 华为校招上机题
- 出租车计费华为校招
- 2014校招 Google在线测试第二场题解 A
- 2014校招 Google在线测试第二场题解 B
- 2014校招 Google在线测试第二场题解 C
- 2014校招 Google在线测试第二场题解 D
- 学习笔记,2014年8月19日,序列化一个实体,写入到本地,和读出。
- Android LayoutInflater原理分析,带你一步步深入了解View
- 设计 4 个 ( 可以是 n 个 ) 线程,其中两个线程每次对 j 增加 1 ,另外两个线程对 j 每次减少 1
- objective c工作原理
- stl基础 set集合
- 2014华为校招 重邮机试 2013.9.14 第一场
- java中关于Map的九大问题
- DNS原理、架构和配置详解
- Cocos2d-x内存管理研究<二>
- SVN
- poj 2378 Tree Cutting (树形dp)
- android4.0新控件Switch方法解析
- 决策树代码实现
- Android + Eclipse + PhoneGap 2.9.0 安卓最新环境配置,部分资料整合网上资料,已成功安装.