haskell 基礎題解(07)

2021-09-25 18:03:19 字數 768 閱讀 6729

【題目】

11 1

1 2 1

1 3 3 1

1 4 6 4 1

。。。這個陣勢叫楊輝三角,國外叫帕斯卡三角。前一行的數字中,每兩個相鄰的數字相加就得到下一行的數字。左右兩邊的數永遠是 1

寫個程式,輸出前幾行的楊輝三角。

import data.list (intersperse)

yang_hui :

: [[int]]

yang_hui = iterate f [1] where

g [x] = [1]

g (x:y:ys)

= x+y : g (y:ys)

f x =

1: g x

out= concat . intersperse "\n" . map show $ take 6 yang_hui

main = putstrln out

對乙個序列中的相鄰兩個元素運算,產生乙個新元素,還可以這麼處理

當,x = [1, 2, 1] 時,

0 1 2 1

1 2 1 0

對應相加就可以得

1 3 3 1 了。

也就是說,對這兩個列表作 zipwith 運算就可以了。

這是另一版本的:

yang_hui = iterate f [1] where

f x = zipwith (+)

(0:x)(x+

+[0])

haskell 基礎題解(06)

題目 如果乙個數的所有真因子 不包含它自身的因子 之和恰等於其自身,則該數為完全數,也稱為完美數 perfect number 完全數有許多奇妙的性質。但它們很稀少,你來求前幾個吧。最小的乙個是 6,因為 6 1 2 3 這個完全數的定義已經很清楚了,如果沒有什麼妙法,就地毯式搜尋也可以。下法就是 ...

haskell基礎題解(14)

題目 用自然數蛇形填充乙個 n 階的方陣。當n 5時,形如 這個問題用 haskell 解決時與 題目13 差別甚微。實際上,從函式式的思考習慣看,只要讓有些行作成後反轉一下就可以了。上 ju n f x x 0.n 1 where f row even row take n row n 1.odd...

haskell 基礎題解(15)

題目 用自然數以螺旋的方式填充乙個nxn的方陣。當n 5時,形如 這個問題對函式式語言是有點小難度。如果是命令式的,可以建乙個陣列,不斷地賦值,改變陣列的狀態,最後把陣列裝滿了就ok。但函式式風格沒有狀態,沒有賦值,只有定義而已。如果仍堅持仿照命令式風格,也可以做。用乙個函式,接受舊陣列,要填入的數...