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

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

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

黑客用智能手机劫持和控制民航飞机 几小时即可使互联网瘫痪的黑客 现已加入谷歌 Tsar开源:淘宝内部大量使用的系统监控工具 五款超实用的开源SVG工具 微信收费事件背后被广泛忽略的技术细节 UIDesigner 3.0架构设计总结 黑客怒了:政府花930万美金仅做一款App Email服务迎来“第二春” 未来将更加个性化 贯穿应用开发始终的八大陷阱 微评微软也推智能手表:是追求未来,还只是跟随? Firefox OS今年6月在5国首发 不含美国市场 8086/8088汇编指令手册 下一个被黑客攻击的对象—无线路由器 Windows Blue开始按钮或将回归,你怎么看? Evernote推孵化器 不占股权 基于C++和Lua的移动游戏引擎Leadwerks 3发布 苹果秘密测试iOS 7与iPhone 6 或将6月发布 酷6 CTO 陆坚:请先信任你的程序员 从电信联手i-Free,看运营商渠道的加速整合 “Animory”开发者分享HTML5游戏开发经验 Appflood SDK:连接中国与海外App流量交互平台 Apache Subversion 1.7.9正式发布! 微软IE浏览器5大动向 加速吸引开发者 开源的简繁转换库OpenCC支持Node.js 继Opera之后,Adobe表示将支持Google Blink 提高大型软件项目质量的一些实用型技术分享 谷歌推出Mirror API,开发者可为Google Glass开发应用 无需999,也不要499,99美元Linux超级计算机带回家 微软反击AWS:推出EC2并大幅降价,“价格战”正酣 Operation InVersion:拯救了LinkedIn的大修项目 五步走战略——Avocado在最初几周内迅速扩大30倍 正在搜索 请稍后 是怎么做的? 为什么这样做? 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 再问,关于中文字符.急!!!! OleDbDataReader这个东西是不是不可以同时打开两个? 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 日期的计算问题 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 用jsp编打印图片的问题(很急) 谁第一个来,谁得分 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 今天生日,除了MM没人祝我生日快乐,只好自已祝福自已了(散分) 如何将表单提交到数据库中? 在线等!!!!!!!!!!!! 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 如何在屏幕任意位置显示移动的文字 收到了数字情书,我嫩是解不开。。帮帮我吧,不好回了。 如何让winamp慢速播放mp3? 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! 在服务器端的DLL文件中如果获取网站在服务器的磁盘上的路径? 在水晶报表中如何控制所显示记录的条数! 一个超级奇怪的iis问题??????? 一路同行?我开始学习C#, 我是一从为接触过单板的人,学的是软件。现在我想提一个问题。 如何解决UNIX通讯问题? 关于读出文件里的字符串与录入的字符串比较问题 哪位高手帮忙编写一个程序,使局域网各用户之间能传送文件!谢谢! help!有关SESSIONBEAN! 无法联接ORACLE数据库,错误信息:ORA-01034:ORACLE not available 其它信息 sos 用vb怎么实现打印功能啊,不是vb附带的那小功能啊,把家帮帮忙啊,。。。sos 请教高手:视频传输编程技术!!! 请教!.net的程序一定要 各位大侠:小女请教一问题 求救!美编的工作站显示器只能显示黑白了! Excel控件使用之怪现象,请DX们诊断诊断 ACCESS转为SQLSERVER后的问题~~ 这是什么错误? asp中怎么读取xml中的元素值呀? 请问,DATAGIRD能否在编辑时,在表格里使用下拉框控件,如何使用??谢谢 哪里有delphi中文帮助 为什末不能向项目Test中添加一个新文件abc.aspx ? 谢谢!! 各位大虾请指教:线程如何获得消息并进行处理 小弟打算开家小店,众位兄弟姐妹出出点子开个什么样的店,及注意事项! 感谢let5flying,,请进!~ 关于pb中调用oracle数据库下的存储过程(在线等待) 求www.richtextbox.com的控件(得到将很感激) changchang请进~~ asp 为何无法打开Access 备份到磁带机的文题 选择Tcl的十大理由-----转载自Tcl/Tk中文网 BCB6中调用lib中的函数出错,急。 什么花什么蜜 什么花的蜂蜜比较好? 有限责任公司和股份有限公司的股东大会职权是否相同 中国古代药铺里那种金色小秤叫什么?不是现代那些电子秤或大秤. 在古代英国人怎么到中国来的 青魇好看吗 马铃薯的晚疫病怎么防治 马铃薯晚疫病影响红薯吗 抛体运动可以是直线运动么?有个选项说是抛体运动可以是直线运动 ,而且是对的,为什么? 什么是枇杷花蜂蜜,这种蜂蜜有什么作用? 什么花的蜂蜜最好?如何介绍好蜂蜜 唐家璇:中日关系深层次原因在于彼此认赵启正:中日关系令人担忧 面临政冷经中国古代绘画展在伦敦举行各部门各地迅速行动 浙江多管齐下帮扶外侨办牵线搭桥舟山与香港小学开展校交浙江为宗馥莉等73名浙商冠冕 宗庆后第十四个全国“男性健康日”浙江多名医国航增加三条国际航线伊朗边境发生武装冲突 14名边防人员哥伦比亚妇女售卖12个女儿“初夜权”漏洞百出的“全球奴役指数”香港快运航空华南首秀拓展内地市场水库泄洪 村民洪口处捕鱼万斤武汉交管严查违法违章电动车 月均查扣马来西亚总理说中国旅马大熊猫是两国友俄议会上院主席称不希望再次授权对乌动“鲨鱼与人类”国际巡展亮相摩纳哥 明内蒙古禁毒教育康复中心:戒心瘾的地方曝意大利帅位锁定5大候选 曼奇尼阿莱中国国家画院推出“无界”艺术作品展英格兰队回家 小组出局全队士气低落述评:“张王”再会 两岸关系发展掀开
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘