算法设计:检测软件人员专业化素养的标尺
(2011-09-09 11:02:49)
标签:
it |
分类: IT[软件与通信] |
这是一道05年我参与华为公司的面试题目:用C语言编写程序,不使用数字转换为字符串的库函数,判断一个数是否为回文数(1,121,123321)?
我当时还是陷入了常规思维,硬是自己编写了数字到字符串转换的程序实现,然后用下标操作来比较。
其实换个思路,就是把原整数进行反序操作,然后比较反序后的数值跟原数值是否相等,这样程序也很精简。这样这道题目的关键点就在于实现数值的反序操作。
#include <stdio.h>
int
main()
{
}
程序世界里面的很多思路都是很奇特的,在考虑算法时一定要放弃习惯思维,要发散思维。
比如交换两个数值是否一定要引入一个临时变量呢?不一定!
怎么实现交换a和b,不引入第三个临时变量?
a = a + b;
b = a - b;
a = a - b;
其实算法的思路是:用a本身充当了临时变量,包含了a和b的信息〔参见第一行〕。
当然,在实际软件产品里面,为了可读性,还是引入临时变量更好。
这里只是想强调软件世界里面算法是个很特别的东西,是考察一个人智商和软件灵感的地方。
至于大多数情况,软件编程只是按照语言语法规则+一点软件工程的职业化素质。。。。。。
软件的乐趣也在于软件人员可以不停的挑战自己,不断的否定自己以达到持续进步和提高。。
同时说明真正伟大的软件公司必须提供一种自由开放、平等包容的文化,看看那些硅谷大牛GOOGLE们就知道了。。。任何官僚作风都是会破坏软件人员生产力和想象力的,这是技术性公司的铁律!
而作为IT人士,需要多思考,除了在语言本身上下功夫,更重要的是积累算法经验。这样会使得你的程序简洁而高效,美丽而大方的!并从中体会到去穷的乐趣和高成就感。
shannon