自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員必須挑戰(zhàn)的七大編程項(xiàng)目,你能挑戰(zhàn)幾個(gè)?

移動(dòng)開(kāi)發(fā)
俗話說(shuō),熟能生巧。然而,有些事情我們做的越多,就會(huì)產(chǎn)生越多的“風(fēng)險(xiǎn)”。比如我們使用相同的工具來(lái)解決同一類(lèi)的問(wèn)題,盡管可以很好的完成它,但卻讓你失去了靈活性思維。 很多編程愛(ài)好者想要不斷挑戰(zhàn)自己,他們有著相同的特征,不滿足現(xiàn)狀,挑戰(zhàn)高難度,更多的則是因興趣而生。文中分享的這七個(gè)編程題目,你不妨來(lái)試試,發(fā)揮自己的靈活性與創(chuàng)造性,也許還能幫助你自學(xué)一套編程技巧。

1)Sums

提示:針對(duì)這道題目,你需要采用一種技術(shù),即使你已經(jīng)擁有幾十年的編程經(jīng)驗(yàn)。從數(shù)據(jù)文件開(kāi)始,列出每個(gè)年級(jí)、每個(gè)學(xué)校、每個(gè)城市、每個(gè)州中紅發(fā)學(xué)生的數(shù)量。你的任務(wù)是按數(shù)據(jù)進(jìn)行排列,每個(gè)州(第一),城市(第二),學(xué)校(第三),最后按年級(jí)(K to 6)

  1. IDENTIFICATION DIVISION.{.js .plain} 
  2.  
  3.   
  4.  
  5. PROGRAM-ID. SUMS.{.js .plain} 
  6.  
  7.   
  8.  
  9. ENVIRONMENT DIVISION.{.js .plain} 
  10.  
  11.   
  12.  
  13. INPUT-OUTPUT SECTION.{.js .plain} 
  14.  
  15.   
  16.  
  17. FILE-CONTROL.{.js .plain} 
  18.  
  19.   
  20.  
  21. SELECT StudentFile ASSIGN TO {.js .plain}'input.txt'{.js .string
  22.  
  23.   
  24.  
  25.     {.js .spaces}ORGANIZATION IS LINE SEQUENTIAL.{.js .plain} 
  26.  
  27.   
  28.  
  29. DATA DIVISION.{.js .plain} 
  30.  
  31.   
  32.  
  33. FILE SECTION.{.js .plain} 
  34.  
  35.   
  36.  
  37. FD StudentFile.{.js .plain} 
  38.  
  39.   
  40.  
  41. 01 StudentCount.{.js .plain} 
  42.  
  43.   
  44.  
  45.    {.js .spaces}02  State       PIC X(12).{.js .plain} 
  46.  
  47.   
  48.  
  49.    {.js .spaces}02  City        PIC X(18).{.js .plain} 
  50.  
  51.   
  52.  
  53.    {.js .spaces}02  School      PIC X(20).{.js .plain} 
  54.  
  55.   
  56.  
  57.    {.js .spaces}02  Grade      PIC X.{.js .plain} 
  58.  
  59.   
  60.  
  61.    {.js .spaces}02  RedHaired   PIC 9999.{.js .plain} 
  62.  
  63.   
  64.  
  65. WORKING-STORAGE SECTION.{.js .plain} 
  66.  
  67.   
  68.  
  69. […]{.js .plain} 
  70.  
  71.   
  72.  
  73. PROCEDURE DIVISION.{.js .plain} 
  74.  
  75.   
  76.  
  77. Begin.{.js .plain} 
  78.  
  79.   
  80.  
  81.     {.js .spaces}OPEN INPUT StudentFile.{.js .plain} 
  82.  
  83.   
  84.  
  85.     {.js .spaces}READ StudentFile{.js .plain} 
  86.  
  87.   
  88.  
  89.       {.js .spaces}AT END MOVE HIGH-VALUES TO StudentCount{.js 
  90. .plain} 
  91.  
  92.   
  93.  
  94.     {.js .spaces}END-READ.{.js .plain} 
  95.  
  96.   
  97.  
  98.     {.js .spaces}[…]{.js .plain} 
  99.  
  100.   
  101.  
  102. STOP RUN.{.js .plain} 
  103.   

下面是個(gè)輸入文件案例:

NY        NYC             PS 122            K1000{.js .plain}

NY        NYC             PS 122            12000{.js .plain}

NY        NYC             PS 122            43000{.js .plain}

NY        NYC             St-Judes          40043{.js .plain}

NY        NYC             St-Judes          50057{.js .plain}

NY        Albany          Green Acres       K0003{.js .plain}

NY        Albany          Green Acres       20005{.js .plain}

NY        Albany          Green Acres       30010{.js .plain}

NY        Albany          Blue Hills        30123{.js .plain}

NY        Albany          Blue Hills        40302{.js .plain}

NY        Albany          Blue Hills        50067{.js .plain}

NY        Rochester       Happy Trails      50076{.js .plain}

  1. <b>Gives:</b>{.js .plain} 
  2.  
  3.   
  4.  
  5.       {.js .spaces}PS 122                 6000{.js .plain} 
  6.  
  7.   
  8.  
  9.       {.js .spaces}St-Judes                100{.js .plain} 
  10.  
  11.   
  12.  
  13.       {.js .spaces}NYC                  6100{.js .plain} 
  14.  
  15.   
  16.  
  17.       {.js .spaces}Green Acres              18{.js .plain} 
  18.  
  19.   
  20.  
  21.       {.js .spaces}Blue Hills              492{.js .plain} 
  22.  
  23.   
  24.  
  25.       {.js .spaces}Albany                510{.js .plain} 
  26.  
  27.   
  28.  
  29.       {.js .spaces}Happy Trails             76{.js .plain} 
  30.  
  31.   
  32.  
  33.       {.js .spaces}Rochester              76{.js .plain} 
  34.  
  35.   
  36.  
  37.       {.js .spaces}NY             6686{.js .plain} 
  38.   

在這個(gè)例子中我采用了COBOL,使用固定的長(zhǎng)度字段,數(shù)值填充為0。你可能會(huì)認(rèn)為tab-
or comma-separated
input,當(dāng)然這個(gè)值不一定非要為0。這個(gè)題目旨在增加正確值并在正確的時(shí)間顯示,而不是為了證明你可以輸入解析局部變量。請(qǐng)注意,這里的數(shù)據(jù)都是虛構(gòu)的。

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

0, 1, 1, 2, 3, 5, 8, 13, 21…{.js .plain}

寫(xiě)個(gè)函數(shù)返回到第n^th^的序列。這題應(yīng)該是很容易。

3) Drawing with a Turtle

TurtleArt是創(chuàng)建該程序的其中一個(gè),
其適合繪制各種圖片。你可以將“pen”移動(dòng)至一個(gè)新的位置,改變畫(huà)筆的顏色,前進(jìn)或者后退,隨意改變方向。此外,你還可以添加繪畫(huà)路徑,改變整個(gè)方形或者圓形色彩。這個(gè)挑戰(zhàn)就是利用TurtleArt來(lái)畫(huà)花。

下載TurtleArt:

你可以參照這幅圖片來(lái)進(jìn)行繪制,當(dāng)然你也可以自由創(chuàng)建。如果你認(rèn)為這個(gè)很簡(jiǎn)單,你還以嘗試?yán)L制Michelle Deschênes:

 4) 16-Puzzle

有時(shí)我們也稱(chēng)其為15-puzzle拼圖,這個(gè)通常是由塑料制作而成的小玩具,采用4×4網(wǎng)格被分成15塊,每一塊都有圖片。游戲的目標(biāo)是重新組合圖片以形成一個(gè)完成的圖像。

Batgirl

參考Wikipedia上9-puzzle的相關(guān)示例。

我們可以通過(guò)Scratch來(lái)編寫(xiě)16-puzzle游戲。它與TurtleArt相類(lèi)似,但不要你安裝軟件。你可以在線使用Scratch。

先不要急著挑戰(zhàn)高難度,由簡(jiǎn)入繁,你可以先從2×2 puzzle開(kāi)始,成功創(chuàng)建后再進(jìn)行3×3,一步一步逐級(jí)增加,直到最終獲得完成16-puzzle。

5) Pascal Triangle(帕斯卡三角)

對(duì)于這個(gè)挑戰(zhàn),通常會(huì)采用SQL來(lái)計(jì)算每一行的帕斯卡三角。

這個(gè)題目可能在我們童年時(shí)期見(jiàn)過(guò),從1開(kāi)始,1在頂部,第一個(gè)和最后一個(gè)都是1;接著每一行中間數(shù)字是由相鄰兩個(gè)數(shù)字之和,呈現(xiàn)金字塔形狀。

我們先定義一個(gè)表,這里使用MySQL語(yǔ)法,也可以采用任意SQL數(shù)據(jù)庫(kù)引擎:

  1. create table pascal ({.js .plain} 
  2.  
  3.   
  4.  
  5.   {.js .spaces}row int not {.js .plain}null{.js .keyword},{.js .plain} 
  6.  
  7.   
  8.  
  9.   {.js .spaces}entry int not {.js .plain}null{.js .keyword},{.js 
  10.  
  11. .plain} 
  12.  
  13.   
  14.  
  15.   {.js .spaces}val int not {.js .plain}null{.js .keyword},{.js .plain} 
  16.  
  17.   
  18.  
  19.   {.js .spaces}primary key (row, entry){.js .plain} 
  20.  
  21.   
  22.  
  23. );{.js .plain} 

先初始化前兩行,從技術(shù)上來(lái)講,你只真正需要第一個(gè),從第三行開(kāi)始變得很容易,實(shí)際上你已經(jīng)從上一行開(kāi)始計(jì)算值。

  1. insert into pascal values (1, 1, 1);{.js .plain} 
  2.  
  3.   
  4.  
  5. insert into pascal values (2, 1, 1);{.js .plain} 
  6.  
  7.   
  8.  
  9. insert into pascal values (2, 2, 1);{.js .plain} 

你可以使用存儲(chǔ)過(guò)程( stored
procedure)來(lái)填寫(xiě) n^th^行,或者你也可以使用宿主語(yǔ)言(host
language)比如PHP或Java來(lái)調(diào)用數(shù)據(jù)庫(kù)。記住,不要使用任何(flow control
)流量控制(比如ifs, loops等),不要調(diào)用遞歸函數(shù),你可以采用insert
statements。

mysql> select * from pascal where row = 10;{.js .plain}

當(dāng)然,只要你愿意,你也可以采用NoSQL數(shù)據(jù)庫(kù)。

6) Sierpiński Triangle (謝爾賓斯基三角形 )

這個(gè)得名來(lái)源于波蘭數(shù)學(xué)家 Wacław Franciszek Sierpiński(波蘭語(yǔ),謝爾賓斯基),有三個(gè)著名的分形是以他的名字命名(Sierpinski三角形,Sierpinski地毯,Sierpinski曲線),創(chuàng)建于1915年。

繪制這個(gè),你需要從一個(gè)等邊三角形(equilateral triangle)開(kāi)始,然后給其填充顏色,然后挖空三角形中間部分,這樣中間的三角形是其他三個(gè)三角形的邊。從9個(gè)三角形增加至27個(gè),以此類(lèi)推。


你也可以在HTML5 canvas中繪制,首先你要決定canvas的形狀及大小以及三角形坐標(biāo)。

如果每個(gè)邊有長(zhǎng)度x,長(zhǎng)度h,那么就可通過(guò)從頂點(diǎn)畫(huà)線,這樣使它底部的邊緣交叉成直角,可以采用應(yīng)用勾股定理找到h至x的比例。

如果你不想采用數(shù)學(xué)原理,那么你還可以使用canvas設(shè)定寬220,高195,三角形頂點(diǎn) (10, 185),(210, 185),(110,
10)。當(dāng)你完成一個(gè)基本的三角形工作,添加一個(gè)小動(dòng)畫(huà)。使其呈現(xiàn)出不同的效果,你可以看到它是如何一步一步實(shí)現(xiàn)的。

完成三角形后,你還可以嘗試 Sierpiński carpet(Sierpinski地毯)。

道理是同樣的,從一個(gè)正方形開(kāi)始,把它分成9個(gè)正方形。挖空中間,和其他8個(gè)正方形構(gòu)成carpet。

7) Project Euler

[[76969]]

Project Euler由Colin Hughes(也被人稱(chēng)為euler) 在2001年10月創(chuàng)建,一開(kāi)始時(shí)作為mathschallenge網(wǎng)站的一個(gè)子欄目。它是一個(gè)具有挑戰(zhàn)性的不僅僅需要具備數(shù)學(xué)能力的“數(shù)學(xué)/計(jì)算機(jī)編程”問(wèn)題集合。

Project Euler致力于鼓勵(lì)、挑戰(zhàn)并且發(fā)展解題技巧,并且為那些對(duì)迷人的數(shù)學(xué)世界有興趣的人提供樂(lè)趣。

Project Euler提供的問(wèn)題集有不同的難度以及多種解題經(jīng)驗(yàn),可以進(jìn)行連續(xù)的啟發(fā)式的學(xué)習(xí)。也就是說(shuō),通過(guò)解決一個(gè)問(wèn)題,提供給解題者一個(gè)新的概念,使解題者可以接觸之前無(wú)法涉及的問(wèn)題。因此,有毅力的參與者將會(huì)逐一完成每一個(gè)題目。

最后:

試試你能挑戰(zhàn)幾個(gè)吧?希望這些挑戰(zhàn)能夠激發(fā)你的好奇心,通過(guò)它們擴(kuò)大視野,幫助你創(chuàng)造性的思考問(wèn)題,因?yàn)檐浖_(kāi)發(fā)本身就是個(gè)創(chuàng)造性的過(guò)程。

責(zé)任編輯:張葉青 來(lái)源: eoe Android開(kāi)發(fā)者社區(qū)
相關(guān)推薦

2010-12-23 15:45:31

程序員編程

2013-04-22 11:13:06

程序員編程誤區(qū)

2011-06-09 13:26:27

編程程序員

2022-05-23 08:09:42

物聯(lián)網(wǎng)IOT

2017-10-13 00:55:11

DevOps持續(xù)交付IT

2014-11-07 16:57:21

程序員

2013-08-27 09:56:51

程序員

2024-03-18 13:11:47

2012-07-13 09:10:46

云服務(wù)

2016-08-23 09:58:59

2019-11-27 18:43:36

程序員編程語(yǔ)言軟件

2009-05-31 19:13:44

2022-01-17 10:28:36

ITIT領(lǐng)導(dǎo)IT管理

2011-06-07 10:28:51

程序員

2018-06-12 14:18:17

2012-06-13 13:16:16

2017-10-30 22:22:34

程序員

2024-01-24 15:06:28

2019-04-01 07:43:39

2012-06-20 10:06:57

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)