加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

算法设计:检测软件人员专业化素养的标尺

(2011-09-09 11:02:49)
标签:

it

分类: IT[软件与通信]

这是一道05年我参与华为公司的面试题目:用C语言编写程序,不使用数字转换为字符串的库函数,判断一个数是否为回文数(1,121,123321)?

我当时还是陷入了常规思维,硬是自己编写了数字到字符串转换的程序实现,然后用下标操作来比较。

其实换个思路,就是把原整数进行反序操作,然后比较反序后的数值跟原数值是否相等,这样程序也很精简。这样这道题目的关键点就在于实现数值的反序操作。

#include <stdio.h>

int main()
{
 int a, b, t;
 scanf( "%d", &a );
 t = a; b = 0;
 while ( t > 0 ) {
  b = b * 10 + t % 10;
  t /= 10;
 }
 if ( a == b )
  printf( "Y" );
 else
  printf( "N" );

  return 0;
}

程序世界里面的很多思路都是很奇特的,在考虑算法时一定要放弃习惯思维,要发散思维。

比如交换两个数值是否一定要引入一个临时变量呢?不一定!

怎么实现交换a和b,不引入第三个临时变量?

a = a + b;

b = a - b;

a = a - b;

其实算法的思路是:用a本身充当了临时变量,包含了a和b的信息〔参见第一行〕。

 

当然,在实际软件产品里面,为了可读性,还是引入临时变量更好。

这里只是想强调软件世界里面算法是个很特别的东西,是考察一个人智商和软件灵感的地方。

至于大多数情况,软件编程只是按照语言语法规则+一点软件工程的职业化素质。。。。。。

软件的乐趣也在于软件人员可以不停的挑战自己,不断的否定自己以达到持续进步和提高。。

同时说明真正伟大的软件公司必须提供一种自由开放、平等包容的文化,看看那些硅谷大牛GOOGLE们就知道了。。。任何官僚作风都是会破坏软件人员生产力和想象力的,这是技术性公司的铁律!

 

而作为IT人士,需要多思考,除了在语言本身上下功夫,更重要的是积累算法经验。这样会使得你的程序简洁而高效,美丽而大方的!并从中体会到去穷的乐趣和高成就感。


shannon

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有