7

我想远离键盘(即笔和纸)练习我的技能,我正在完成简单的练习题,比如 Fizz Buzz、Print the first N primes。

你最喜欢的简单编程问题是什么?

4

7 回答 7

12

我一直在研究http://projecteuler.net/

于 2008-08-27T13:13:49.437 回答
6

问题: 在数字 123456789 之间的任意位置插入 + 或 - 号,使得表达式的计算结果为 100。条件是不能更改数字的顺序。

例如:1 + 2 + 3 - 4 + 5 + 6 + 78 + 9 = 100

编程问题: 用你喜欢的语言编写一个程序,输出上述问题的所有可能解决方案。

于 2008-08-27T12:49:14.427 回答
5

如果您想要笔和纸的练习,我建议您进行设计而不是编码。

实际上在纸上编码很糟糕,它让你几乎什么都学不到。工作环境确实很重要,所以在电脑上打字、编译、查看你犯了什么错误、在这里和那里使用重构,只是不能与你在一张纸上可以做的事情相比,所以,你可以在一张纸上做的事情一张纸,虽然作为一个有趣的脑力练习并不实用,但它不会大大提高你的编码技能。

另一方面,您可以在论文中手动设计中等甚至复杂应用程序的架构。事实上,我通常会这样做。工程工具(例如 Enterprise Architect)并不足以取代良好的全手工图表。

好的项目可能是,您将如何设计游戏引擎?类、线程、存储、物理、保存一切的数据结构等等。您将如何启动搜索引擎?您将如何设计模式识别系统?

我发现这类问题比你能做的任何纸质编码更有价值。

于 2008-08-27T13:28:34.300 回答
3

在 Steve Yegge 的文章五个基本电话屏幕问题(在第一区:编码下)中有一些简单的编程问题的好例子。我发现这些非常适合在笔和纸上做。此外,同一篇文章中 OOP 设计下的问题可以在笔和纸上(甚至在你的脑海中)完成,我认为这是很好的练习。

于 2008-08-27T12:53:38.550 回答
1

汉内塔非常适合递归练习。

我还会搜索示例编程面试问题。

于 2008-08-27T12:49:35.860 回答
1

相当多的竞争性编程在线网站充满了示例问题/挑战,按“难度”排序。很多时候,我认为“算法”问题中更简单的类别会适合你。

例如,查看TopCoder(算法部分)!

除此之外,2个样本:

  1. 通过坐标 (x_i, y_i) 和数字 R>0,您将获得平面中 N 个点的列表。输出 N 个给定点中可以被半径为 R 的圆盘同时覆盖的最大数量(对于奖励点:复杂性?)。

  2. 给定一个包含 N 个数字 a1 到 aN 的数组,并且您想要计算a1 * a2 * ... * aN / aii 的所有值(因此输出再次是 N 个元素的数组)而不使用除法。提供一个(非天真的)方法(复杂性应该在 O(N) 乘法中)。

于 2008-08-27T13:12:32.623 回答
1

我也喜欢 euler 项目,但我想指出,这些问题很快就会变得非常棘手。在前 20 个问题之后,它们开始成为大多数人在 1/2 小时内无法解决的问题。另一个问题是,他们中的许多人处理非常大的数字的数学,不适合标准整数甚至长变量类型。

于 2008-08-27T13:16:29.947 回答