出几个小题目,活跃下气氛。

iambic 2007-10-20 06:46:34

1. Perl题目。

写一行代码,将STDOUT的缓冲设置为1(即每有数据立刻刷出)。


2. Python题目。

写一行代码,求出fibonacci的第n项。fibonacci序列为0, 1, 1, 2, 3, 5, 8, 13, ...
算法复杂度应为O(n)。


3. Tcl题目。

用Tcl脚本写一个Tcl交互解释器(即从命令行接受用户输入,得到一条完整的语句后即刻执行)。

...全文
538 46 打赏 收藏 转发到动态 举报
写回复
用AI写文章
46 条回复
切换为时间正序
请发表友善的回复…
发表回复
illuminance 2007-12-24
  • 打赏
  • 举报
回复
switch -regexp --$value {
^$cmd1\s+$cmd2\s+{$} {command1}
...
}
illuminance 2007-12-24
  • 打赏
  • 举报
回复
open OUT, "> ", "path" or die "open error";
select OUT and $| = 1;
iambic 2007-11-16
  • 打赏
  • 举报
回复
准备结贴了,可惜只有一个题目有结果。
pptor 2007-11-16
  • 打赏
  • 举报
回复
print ([ j for j,k in [(1,0)] for i in range(0,n+1) for j,k in [(k,j+k)] ])[-1]
xdspower 2007-11-10
  • 打赏
  • 举报
回复
你们都是牛人,不过python弄出那么个算式也太不可读了吧
sewenew 2007-11-09
  • 打赏
  • 举报
回复
第一题:
{
local $| = 1 ;
open OUT, ">", "path" or die "open error";
}
flypuma 2007-10-24
  • 打赏
  • 举报
回复
n=300000
30s的时候开始输出,整个过程10s,呵呵,这个数字太长了,内存用了不到20M
flypuma 2007-10-24
  • 打赏
  • 举报
回复
太激动了,忘记了后面的[-1]
print [ (n==i)*k for j,k in [(-1,1)] for i in range(0,n+1) for j,k in [(k,j+k)]][-1]
flypuma 2007-10-24
  • 打赏
  • 举报
回复
天啊,我发现更优雅的写法

print [ (n==i)*k for j,k in [(-1,1)] for i in range(0,n+1) for j,k in [(k,j+k)]]
flypuma 2007-10-24
  • 打赏
  • 举报
回复
可以了,我在我的window上算20s出来 n=200000的结果
内存用的非常少,估计n=300000问题也不大

print [i==n and k or [] for j,k in [(-1,1)] for i in range(0,n+1) for j,k in [(k,j+k)]][-1]
flypuma 2007-10-24
  • 打赏
  • 举报
回复
另外告诉你一个好消息,偶在linux上算 n=300000 也就是区区10s

俺的windows 1G内存,双核

linux : 8G 内存 CPU: 4 x 2800 MHz, AMDOpteron(tm)Processor2220 (2 socket, dual core)
flypuma 2007-10-24
  • 打赏
  • 举报
回复
算你狠,差点把我机器搞死,九死一生才kill掉活回来了
flypuma 2007-10-24
  • 打赏
  • 举报
回复
另外,如果一定要把 0,1塞进去,我更喜欢用k 而不是用 j 作为数组最后的取值。改一下这样,效果一样的,呵呵

print ([ k for j,k in [(-1,1)] for i in range(0,n+1) for j,k in [(k,j+k)] ])[-1]
iambic 2007-10-24
  • 打赏
  • 举报
回复
你机器的内存是多少?试下200, 000。
flypuma 2007-10-24
  • 打赏
  • 举报
回复
还好啊,n=100000,5秒钟,内存14M
zarz 2007-10-24
  • 打赏
  • 举报
回复
mark
flypuma 2007-10-23
  • 打赏
  • 举报
回复
对不起,改正一下,上面帖子的改进算法应该是
a = lambda x,y,n : (n==1) and '0' or ((n>3) and a(y,x+y,n-1) or x+y);a(0,1,1)

0上有个''对
flypuma 2007-10-23
  • 打赏
  • 举报
回复
1, $|=1
2, a = lambda x,y,n : (n>3) and a(y,x+y,n-1) or x+y
第n个值就是 a(0,1,n),如 第5个就是 a(0,1,5)
如果非要写成一行,那就
a = lambda x,y,n : (n>3) and a(y,x+y,n-1) or x+y; a(0,1,5)

严格说,这个算法有个缺陷,算第一个时候得出的是1,而不是0,改进一下就是:
a = lambda x,y,n : (n==1) and 0 or ((n>3) and a(y,x+y,n-1) or x+y);a(0,1,1)
得出的就是 '0'

3,tcl不会,呵呵
iambic 2007-10-23
  • 打赏
  • 举报
回复
唉,刚试了下,n很大的时候(n > 100, 000)很吃内存,差点当机。
flypuma 2007-10-23
  • 打赏
  • 举报
回复
嗯,算你狠,果然比偶的简洁些。只不过理解起来有点别扭,硬是把0,1给塞进去了,呵呵。不过俺的也算满足你要求了
加载更多回复(26)

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧