说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

为兴趣而生 七大编程挑战项目,你敢来吗?

HTML文档下载 WORD文档下载 PDF文档下载
很多编程爱好者想要不断挑战自己,他们有着相同的特征,不满足现状,挑战高难度,更多的则是因兴趣而生。文中分享的这七个编程题目,你不妨来试试,发挥自己的灵活性与创造性,也许还能帮助你自学一套编程技巧。


俗话说,熟能生巧。然而,有些事情我们做的越多,就会产生越多的“风险”。比如我们使用相同的工具来解决同一类的问题,尽管可以很好的完成它,但却让你失去了灵活性思维。

很多编程爱好者想要不断挑战自己,他们有着相同的特征,不满足现状,挑战高难度,更多的则是因兴趣而生。文中分享的这七个编程题目,你不妨来试试,发挥自己的灵活性与创造性,也许还能帮助你自学一套编程技巧。

PS:起初,我打算提供解决方案案例,但后来想想这也许会“剥夺”你的乐趣,这些挑战对有的人来说可能是小Case,有的则可能需要花费很长时间,当然这取决于你的技术背景如何了。Ok,开始吧!

1) Sums

提示:针对这道题目,你需要采用一种技术,即使你已经拥有几十年的编程经验。从数据文件开始,列出每个年级、每个学校、每个城市、每个州中红发学生的数量。你的任务是按数据进行排列,每个州(第一),城市(第二),学校(第三),最后按年级(K to 6)

IDENTIFICATION DIVISION.PROGRAM-ID. SUMS.ENVIRONMENT DIVISION.INPUT-OUTPUT SECTION.FILE-CONTROL.SELECT StudentFile ASSIGN TO 'input.txt'    ORGANIZATION IS LINE SEQUENTIAL.DATA DIVISION.FILE SECTION.FD StudentFile.01 StudentCount.   02  State       PIC X(12).   02  City        PIC X(18).   02  School      PIC X(20).   02  Grade      PIC X.   02  RedHaired   PIC 9999.WORKING-STORAGE SECTION.[…]PROCEDURE DIVISION.Begin.    OPEN INPUT StudentFile.    READ StudentFile      AT END MOVE HIGH-VALUES TO StudentCount    END-READ.    […]STOP RUN.

下面是个输入文件案例:

NY        NYC             PS 122            K1000NY        NYC             PS 122            12000NY        NYC             PS 122            43000NY        NYC             St-Judes          40043NY        NYC             St-Judes          50057NY        Albany          Green Acres       K0003NY        Albany          Green Acres       20005NY        Albany          Green Acres       30010NY        Albany          Blue Hills        30123NY        Albany          Blue Hills        40302NY        Albany          Blue Hills        50067NY        Rochester       Happy Trails      50076<b>Gives:</b>      PS 122                 6000      St-Judes                100      NYC                  6100      Green Acres              18      Blue Hills              492      Albany                510      Happy Trails             76      Rochester              76      NY             6686

在这个例子中我采用了COBOL,使用固定的长度字段,数值填充为0。你可能会认为tab- or comma-separated input,当然这个值不一定非要为0。这个题目旨在增加正确值并在正确的时间显示,而不是为了证明你可以输入解析局部变量。请注意,这里的数据都是虚构的。

2) Fibonacci Sequence(斐波那契序列)

0, 1, 1, 2, 3, 5, 8, 13, 21…

写个函数返回到第nth的序列。这题应该是很容易。

3) Drawing with a Turtle

TurtleArt是创建该程序的其中一个, 其适合绘制各种图片。你可以将 “pen”移动至一个新的位置,改变画笔的颜色,前进或者后退,随意改变方向。此外,你还可以添加绘画路径,改变整个方形或者圆形色彩。这个挑战就是利用TurtleArt来画花。

下载TurtleArt:

  • Microsoft Windows
  • Mac OS X
  • GNU/Linux (需要点击 Java. Adjust进行设置)

你可以参照这幅图片来进行绘制,当然你也可以自由创建。如果你认为这个很简单,你还以尝试绘制Michelle Deschênes:


 4) 16-Puzzle

有时我们也称其为15-puzzle拼图,这个通常是由塑料制作而成的小玩具,采用4×4网格被分成15块,每一块都有图片。游戏的目标是重新组合图片以形成一个完成的图像。

Batgirl

参考 Wikipedia上9-puzzle的相关示例。

我们可以通过Scratch来编写16-puzzle 游戏。它与TurtleArt相类似,但不要你安装软件。你可以在线使用Scratch。

先不要急着挑战高难度,由简入繁,你可以先从2×2 puzzle 开始,成功创建后再进行3×3,一步一步逐级增加,直到最终获得完成16-puzzle。

5) Pascal Triangle(帕斯卡三角)

对于这个挑战,通常会采用SQL来计算每一行的帕斯卡三角。


这个题目可能在我们童年时期见过,从1开始,1在顶部,第一个和最后一个都是1;接着每一行中间数字是由相邻两个数字之和,呈现金字塔形状。

我们先定义一个表,这里使用MySQL语法,也可以采用任意SQL数据库引擎:

create table pascal (  row int not null,  entry int not null,  val int not null,  primary key (row, entry));

先初始化前两行,从技术上来讲,你只真正需要第一个,从第三行开始变得很容易,实际上你已经从上一行开始计算值。

insert into pascal values (1, 1, 1);insert into pascal values (2, 1, 1);insert into pascal values (2, 2, 1);

你可以使用存储过程( stored procedure)来填写 nth行,或者你也可以使用宿主语言(host language)比如PHP或Java来调用数据库。记住,不要使用任何(flow control )流量控制(比如ifs, loops等),不要调用递归函数,你可以采用insert statements。

mysql> select * from pascal where row = 10;

当然,只要你愿意,你也可以采用NoSQL数据库。

6) Sierpiński Triangle (谢尔宾斯基三角形 )

这个得名来源于波兰数学家 Wacław Franciszek Sierpiński(波兰语,谢尔宾斯基),有三个著名的分形是以他的名字命名(Sierpinski三角形,Sierpinski地毯,Sierpinski曲线),创建于1915年。

绘制这个,你需要从一个等边三角形(equilateral triangle )开始,然后给其填充颜色,然后挖空三角形中间部分,这样中间的三角形是其他三个三角形的边。从9个三角形增加至27个,以此类推。

你也可以在HTML5 canvas中绘制,首先你要决定canvas的形状及大小以及三角形坐标。

如果每个边有长度x,长度h,那么就可通过从顶点画线,这样使它底部的边缘交叉成直角,可以采用应用勾股定理找到h至x的比例。

如果你不想采用数学原理,那么你还可以使用canvas设定宽220 ,高195,三角形顶点 (10, 185),(210, 185),(110, 10)。当你完成一个基本的三角形工作,添加一个小动画。使其呈现出不同的效果,你可以看到它是如何一步一步实现的。

完成三角形后,你还可以尝试 Sierpiński carpet(Sierpinski地毯)。


道理是同样的,从一个正方形开始,把它分成9个正方形。挖空中间,和其他8个正方形构成carpet。

7) Project Euler

Project Euler由Colin Hughes (也被人称为euler) 在 2001年10月创建,一开始时作为mathschallenge网站的一个子栏目。它是一个具有挑战性的不仅仅需要具备数学能力的“数学/计算机编程”问题集合。

Project Euler致力于鼓励、挑战并且发展解题技巧,并且为那些对迷人的数学世界有兴趣的人提供乐趣。 Project Euler提供的问题集有不同的难度以及多种解题经验,可以进行连续的启发式的学习。也就是说,通过解决一个问题,提供给解题者一个新的概念,使解题者可以接触之前无法涉及的问题。因此,有毅力的参与者将会逐一完成每一个题目。

最后:

试试你能挑战几个吧?希望这些挑战能够激发你的好奇心,通过它们扩大视野,帮助你创造性的思考问题,因为软件开发本身就是个创造性的过程。

英文出自:Smartbear

分布式系统事务原子性的非阻塞实现 IBM发布基于人脑特性设计的全新计算架构和编程语言 16款加速编码的HTML5在线工具 JFrog:开源项目的最大挑战是文档和许可 5个技巧打造完美用户体验,不到两年完成用户万到千万的增长 我想在数据环境来做报表,我如何生成动态的报表。能通过SQL来实现吗。高分请求,在线等候!!!! 关于数据汇总问题(高手解答,在线等待) 请问treeview与框架! 用WMI如何使远程主机重新启动? 求助:问一个sql server的问题? 关于JBuilder 9的问题 各位哥哥姐姐,帮我看看这个问题吧,都折腾几天了。 升级了,放分~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ debug 和release 描写雪的成语有哪些?求求你了 有机质和有机物有什么区别? 描写雪很小的成语 有机物与有机质有没有区别 比较有趣的,当然答案也要了,越多越好. 回答生活中的有关问题 我想问下有关生物、生活的一个问题我想问一下,为什么 有机质就是有机物吗?如果不是,有何区别? 如果一个三角形的三条边长都是整厘米数,其中有两条边 卜拉希米强调日内瓦会议旨在实现政治解法国巴黎CAC40股指1日下跌“网络文学”利好频传 或将迎来爆发期世卫组织官员:全面免费医疗不是医改最男子车祸送医不治身亡 家属砸ICU病奔4,奔5人士必看(很经典)丨下午茶赚钱的终极门道:抓住这七类人的钱就够去年你居然花了这么多 最大开销竟是它重庆迎来大寒节气 市民裹厚实冬装出行福州摧毁一\"推荐牛股\"诈骗团伙 韩娱之天生缘分明月清风刀餮修罗仙缘五行弑道征天滨州铁路桥旅游东极广场旅游香港诺亚方舟旅游北投梅庭旅游台北宾馆旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘