Haskell程序打印空心直角三角形星号图案
在Haskell中,我们可以使用replicate函数和递归函数来创建空心直角三角形星号图案。
空心直角三角形星号图案是由星号(*)组成的图案,形成一个直角三角形形状,中间有空隙,如下所示。
** * * * * * * * * * * * * ********
该形状通过以特定顺序打印星号来创建,每行星号的数量随着行号的增加而增加。
算法
步骤1 − 使用replicate/递归函数定义printRow函数,
步骤2 − 程序执行将从main函数开始。main()函数控制整个程序。它写成main = do。在main函数中,传递一个数字,直到打印出空心直角三角形星号图案。
步骤3 − 初始化名为“n”的变量。它将保存要打印空心直角三角形星号图案的整数。
步骤4 − 函数调用后,使用‘putStrLn’语句将结果打印到控制台。
示例1
在这种方法中,定义了一个名为printPattern的函数,该函数以整数n作为参数,并返回一个表示大小为n的空心直角三角形星号图案的字符串。辅助函数printRow以两个整数n和i作为参数,并返回一个表示一行星号和空格的字符串。printRow函数使用if语句来确定该行是否应填充星号,或者是否应为空心行,两端为星号,中间为空格。printPattern函数使用列表推导来生成n行星号和空格。
module Main where printRow :: Int -> Int -> String printRow n i = if i == n then replicate i '*' ++ "
" else "*" ++ replicate (i - 1) ' ' ++ "*
" printPattern :: Int -> String printPattern n = concat [printRow n i | i <- [1..n]] main :: IO () main = putStr (printPattern 8)
输出
** * * * * * * * * * * * * ********
示例2
在此示例中,使用replicate函数定义了该函数以打印空心直角三角形星号图案。
module Main where printRow :: Int -> Int -> String printRow n i = if i == 1 then "*
" else "*" ++ replicate (2 * i - 3) ' ' ++ "*
" printPattern :: Int -> String printPattern n = concat [printRow n i | i <- [1..n]] main :: IO () main = putStr (printPattern 8)
输出
* * * * * * * * * * * * * * *
示例3
在这种方法中,printRow是一个递归函数,它接受两个参数n和i,分别表示图案的大小和当前行。如果i等于1,则返回一个包含单个星号后跟换行符的字符串。否则,它返回一个字符串,其第一个和最后一个字符为星号,中间部分为等于2 * i - 3的空格数(随着i的增加,空格数减少),后跟对printRow的递归调用,其中i - 1作为更新的行号。
module Main where printRow :: Int -> Int -> String printRow n i | i == 1 = "*
" | otherwise = "*" ++ replicate (2 * i - 3) ' ' ++ "*
" ++ printRow n (i - 1) printPattern :: Int -> String printPattern n = printRow n n main :: IO () main = putStr (printPattern 8)
输出
* * * * * * * * * * * * * * *
结论
在Haskell中,要打印空心直角三角形星号图案,我们可以使用replicate和递归函数。
数据结构
网络
关系数据库管理系统
操作系统
Java
iOS
HTML
CSS
Android
Python
C语言编程
C++
C#
MongoDB
MySQL
Javascript
PHP