对论坛一个华为题的回答
2011-10-28 11:17
232 查看
对论坛一个华为题的回答
Horin | horin153@msn.com
今天上班看见了一个帖子: http://topic.csdn.net/u/20111025/23/18936b47-d9b0-48db-a49a-97c2be52fad5.html
正好今天有空, 就试着做了下. 根据题意, 就是代码不需要做算法无关的检查, 仅需要体现算法思路即可. 出题者做了这么多要求, 很可能就是希望答题者不要把问题复杂化, 才可能在短时间内写出算法代码来. 有了这些限制, 仅需要每次取一个运算符和一个运算数就可以进行循环处理了.
个人点评: 该算法时间效率不会是最好的, 但空间占用可能是最好的. 体现的就是 c/c++ 语言的基本功.
Horin | horin153@msn.com
今天上班看见了一个帖子: http://topic.csdn.net/u/20111025/23/18936b47-d9b0-48db-a49a-97c2be52fad5.html
正好今天有空, 就试着做了下. 根据题意, 就是代码不需要做算法无关的检查, 仅需要体现算法思路即可. 出题者做了这么多要求, 很可能就是希望答题者不要把问题复杂化, 才可能在短时间内写出算法代码来. 有了这些限制, 仅需要每次取一个运算符和一个运算数就可以进行循环处理了.
个人点评: 该算法时间效率不会是最好的, 但空间占用可能是最好的. 体现的就是 c/c++ 语言的基本功.
#include <assert.h> #include <stdio.h> int cal(int c1, char op, int c2) { if (op=='+') return c1+c2; if (op=='-') return c1-c2; if (op=='*') return c1*c2; if (op=='/') return c1/c2; return 0; } int calculate(int len, char *expStr) { assert(expStr); if (len < 3) return -1; char *p = expStr; int c1 = p[0]-'0'; char op = p[1]; int c2 = p[2]-'0'; p += 3; while(*p) { if (*p=='*' || *p=='/') { c2 = cal(c2, *p, p[1]-'0'); } else { c1 = cal(c1, op, c2); op = *p; c2 = p[1]-'0'; } p += 2; } return cal(c1, op, c2); } int main(void) { int ret1 = calculate(3, "1+2"); int ret2 = calculate(11, "1+2*3/5-6*7"); int ret3 = calculate(11, "1+2-3/5-6*7"); printf ("values: %d, %d, %d", ret1, ret2, ret3); return 0; } // output: // values: 3, -40, -39
相关文章推荐
- 对论坛一个字符串编码问题的回答
- 看论坛一个帖子带来的震撼--熟悉函数多么重要(glob函数)
- 华为机试题:判断一个数字中是否包含两个相同的子串
- 一个华为女员工的真实生活
- 做好一个论坛需要注意的几点
- 无意间发现的一个留学mba的论坛
- 华为机试题:向升序单向链表中插入一个节点
- 原先程序员杂志支持的三个大论坛合并成一个
- 推荐一个CISSP专家论坛
- 华为机试-设计一个定时器管理系统
- 从论坛上看到一个高手的java 代码回贴 不知道怎么收藏只好 复制过来写个博客了 (注明出处)
- 回答下在bugs.php上的一个问题
- 2007.11.18 为俱乐部建立一个论坛
- 网易面试题之 牛牛拿到了一个藏宝图,顺着藏宝图的指示,牛牛发现了一个藏宝盒,藏宝盒上有一个机关,机关每次会显示两个字符串 s 和 t, * 根据古老的传说,牛牛需要每次都回答 t 是否是 s 的子序
- 论坛里看到的一个SQL问题及解答
- 回复一个javaeye论坛里朋友的一个问题
- 2015华为校招模拟题-判断一个数字中是否包含两个相同的子串
- 论坛上的一个问题引发的(修改中)
- 通过Z-BlogPHP程序快速在论坛里搭建一个博客页面
- Python的Django框架完成一个完整的论坛(4.项目所需的其他py文件源码)