Not Only Algorithm,不仅仅是算法,关注数学、算法、数据结构、程序员笔试面试以及一切涉及计算机编程之美的内容 。。
你的位置:NoAlGo博客 » 趣味 » , ,

Project Euler一句话题目

欧拉计划(Project Euler)是一个好玩的编程网站,其网址为http://projecteuler.net/
类似于各大ACM比赛的OJ(Online Judge),上面提供了许多有趣的数学、编程题目。不同的是,其题目很简洁,只需提交最终答案,可以使用任何语言,任何复杂度的算法。如果不想做ACM里面题目很长、意思很复杂、输入输出限制很严格的题目,可以选择上面的题目娱乐一番。不过后面的题目会越来越难。

下面选几道使用Python一句话就可以解决的题目作为例子进行介绍。注意,如果使用C++的话可能要写更多的代码。

1. 3和5的倍数
算出所有1000以下为3或5的倍数的自然数的和。

#1
print sum([i for i in xrange(10000) if (i % 3 == 0 or i % 5 == 0)])

4. 最大回文数
找出由两个三位数的积构成的最大回文数

#4
print max([x*y for x in xrange(100, 1000) for y in xrange(x, 1000) if x*y==int((str(x*y))[::-1])])

6. 平方和的差
求出前一百个正整数的和的平方与前一百个正整数的平方和的差

#6
print sum(xrange(101)) ** 2 - sum([i**2 for i in xrange(101)])

9. 特殊的勾股三元组
存在唯一的勾股三元组a, b, c,且a + b + c = 1000,求出这三个数的乘积

#9
print sum([a*b*c for a in range(1000) for b in range(1000) for c in [1000-a-b] if a*a + b*b == c*c and a < b < c])

13. 大数字之和
计算给定100个50位的数字的和的前10位数字。

#13
print str(sum(x))[:10]

16. 幂的各位数之和
计算2^1000的各位数之和。

#16
print sum(int(i) for i in str(2**1000))

19. 计算星期天
计算在20世纪中(从1901年1月1日到2000年12月31日)总共有多少个月份的第一日是星期天。

#19
print len(filter(lambda x: datetime.datetime(x[0], x[1], 1).weekday()==6, [(x, y) for x in range(1901, 2001) for y in range(1, 13)]))

20. 阶乘的各位数之和
计算100!的结果的各位数之和。

#20
print sum(int(i) for i in str(reduce(lambda x,y:x*y, range(1,101))))

25. 1000位的斐波那契数字
第几个斐波那契数字首先达到1000位。

#25
print len(reduce(lambda x,y:len(str(x[-1]))==1000 and x or x.append(x[-1]+x[-2]) or x, range(5000), [1, 1]))

29. 不同的幂
计算不同的a^b(2 ≤ a ≤ 100且2 ≤ b ≤ 100)共有多少个。

#29
print len(set([x**y for x in xrange(2,101) for y in xrange(2, 101)]))
上一篇: 下一篇:

我的博客

NoAlGo头像编程这件小事牵扯到太多的知识,很容易知其然而不知其所以然,但真正了不起的程序员对自己程序的每一个字节都了如指掌,要立足基础理论,努力提升自我的专业修养。

站内搜索

最新评论