百度空间 | 百度首页 
 
查看文章
 
大学轶事
2009-10-29 19:43

是什么时候的事忘记了,某初学者练习写一算法,拿来问某老师有没有问题:

int i;
int j;
int k=0;
for(i=1;i<=10000;i++){
j = i%2;
if(j==0){
   k = k+1;
}
}

某老师看罢说:对是对,算法有待提高。遂给出一个只有2行的代码:

int i,k=0;
for(i=2;i<=10000;i+=2) k += 0==i%2 ? 1 : 0;

这么写有几个优点:

1、节省了一个变量

2、提高了一倍的运行速度

3、将比较语句中的数值写在了表达式前面

4、合理地使用了三目运算符

5、代码整体简洁精练

从中不难看出专家的实力,管中窥豹可见一斑!

Monyer


类别:放松娱乐 | 添加到搜藏 | 浏览() | 评论 (18)
 
最近读者:
 
网友评论:
1
2009-10-29 20:21 | 回复
某初学者 还真隐晦.
 
2
2009-10-29 20:41 | 回复
楼上不是我。
 
3
2009-10-29 21:32 | 回复
int i,k=0;
for(i=2;i<=10000;i+=2) k ++;
 
4
2009-10-29 22:13 | 回复
这哥们C学的够纠结的..
 
5
2009-10-29 22:35 | 回复
占位
 
6
2009-10-29 22:36 | 回复
占位
 
7
2009-10-29 22:48 | 回复
回复MAR:你跟那个老师一样有才了!
 
8
2009-10-29 23:11 | 回复
哦,直接除
 
9
2009-10-29 23:56 | 回复
回复MAR:强
偶来灌水的
 
10
2009-10-30 06:45 | 回复
“畸形模式”,有时候简单才是高效。除非像下面这样的程序才会引起别人的兴趣:
#include <stdio.h>
int a=10000,b,c=280000,d,e,f[280001],g;
int main()
{
    for(;b-c;)f[b++]=a/5;
    for(;d=0,g=c*2;c -=14,printf("%.4d",e+d/a),e=d%a)for(b=c; d+=f[ b ]*a,f[ b ]=d%--g,d/=g--,--b; d*=b);
    return 0;
}
 
11
2009-10-30 06:49 | 回复
很多人不明白事理且不老老实实的写程序。
FB最伟大!
 
12
2009-10-30 07:04 | 回复
在这里能了解到好多东西,monyer 天才呀
 
13
2009-10-30 09:50 | 回复
我现在才知道你有多天才
 
14
2009-10-30 10:32 | 回复
回复mamimoluo:恩,你说的很对!

这种写法通常可以用作考试题或者来炫的,工作中这样写,如果被人codereview的话,一般肯定得重写!这个跟“专家”写法雷同,华而不实,繁而无用!

如我文中所说,只是泛用语言技巧,忽略了算法本质,其实是最可悲的!这也是中国专家之所以搞不出东西来的缘故
 
15
2009-10-30 11:31 | 回复
这也是语言本身的语法特性所导致的~
所以比尔盖茨至始至终爱着他的BASIC,说可以用BASIC写出任何东西。
所以很多大型项目,如google、航天、空间信息等采用Python语言,就是怕开发团队中有太多的“专家”。
我及我身边的朋友现在开发项目逐渐向Python转移,而不是采用一些比之“高效?”的Ruby之类。
 
16
2009-10-31 12:21 | 回复
3 4句没看很懂……
 
17
2009-11-01 12:54 | 回复
回复MAR:说的对嘛。直接除。
 
18
2009-11-24 16:56 | 回复
前几天的时候看那几行代码我还比较“白痴”。
现在能看懂了,呵呵!
 
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
验证码: 请点击后输入四位验证码,字母不区分大小写
      

     

©2009 Baidu