简单的编程实践(Fizz Buzz,Print Primes)

时间:2020-03-05 18:43:48  来源:igfitidea点击:

我想通过键盘(即笔和纸)来练习我的技能,并且遇到了诸如Fizz Buzz,打印前N个素数之类的简单练习问题。

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

解决方案

回答

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

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

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

回答

Hannoi塔非常适合进行递归练习。

我还将搜索样本编程面试问题。

回答

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

回答

不少在线竞争性编程网站都包含示例问题/挑战,以"难度"排序。我认为,"算法"问题中较简单的类别通常很适合我们。

例如,签出TopCoder(算法部分)!

除此之外,还有2个样本:

  • 通过它们的坐标(x_i,y_i),我们可以得到一个平面上的N个点的列表,以及一个数字R> 0。输出可以同时被半径为R的磁盘覆盖的N个给定点中的最大数目(对于奖励点:复杂度?)。
  • 我们得到了一个由N1到aN的N个数组,并且我们想为i的所有值计算`a1 * a2 * ... * aN / ai'(因此输出还是N个元素的数组),而无需使用除法。提供(非天真)方法(复杂度应为O(N)乘法)。

回答

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

回答

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

回答

如果我们想进行笔和纸类的练习,我建议我们进行更多的设计而不是编码。

实际上,纸上编码很烂,它几乎使我们学不到任何东西。工作环境确实很重要,因此在计算机上打字,编译,查看我们犯了什么错误,在这里和那里使用重构,只是无法与我们在一张纸上可以做的事情相提并论,因此,我们可以在一张纸上做些什么一张纸上写的东西虽然是一种有趣的脑力锻炼是不切实际的,但它并不能提高编码技能。

另一方面,我们可以在纸上手工设计中等甚至复杂应用程序的体系结构。实际上,我通常这样做。工程工具(例如Enterprise Architect)不足以替代所有好的手工图。

好的项目可能是,我们将如何设计游戏引擎?类,线程,存储,物理,将容纳所有内容的数据结构等等。我们将如何启动搜索引擎?我们将如何设计模式识别系统?

我发现这类问题比我们可以完成的任何纸质编码都有意义。