Answers:
i=input()
m=["+"+"-"*(i*4+1)+"+","|"+" "*(i*4+1)+"|"]
for v in range(i,1,-1):
m+=[" "*(i-v)*2+"+"+"-"*(v*4+1)+"+"," "*(i-v+1)*2+"|"+" "*((v-1)*4+1)+"|"]
m.pop()
m+=[" "*(i-1)*2+"|"+" "*5+"|"," "*(i-1)*2+" _|_|_"]
print'\n'.join(m[::-1])
蛋糕2的缺失示例:
_|_|_
| |
+---------+
| |
+---------+
int(input())
为input()
和print
语句,另外还可以将四个空格更改为一个(如果是制表符,请将其更改为一个空格以使其更明显地表明它是一个字符) 。另外由于某种原因,您的字节数太高了4。
递归蛋糕。
f=(n,i=--n,r=(n,c)=>'- '[+!c].repeat(n),p=r((i-n)*2),j=n*4+5,x=p+`+${r(j,1)}+
`)=>(n?f(n-1,i)+x:p+` _|_|_
`)+p+`|${r(j)}|
`+(n-i?'':x)
let f=(n,i=--n,r=(n,c)=>'- '[+!c].repeat(n),p=r((i-n)*2),j=n*4+5,x=p+`+${r(j,1)}+
`)=>(n?f(n-1,i)+x:p+` _|_|_
`)+p+`|${r(j)}|
`+(n-i?'':x)
console.log(f(4))
新的方法:
echo$p=str_pad("",-2+2*$n=$argv[1])," _|_|_";for($x=" ",$b=$y="----";$n--;){$a.=$x;if($n)$b.=$y;echo"
$p| $a|
",$p=substr($p,2),"+-$b+";}
旧版本供参考:
$p=str_pad;for($o=["_|_|_"];$i++<$n=$argv[1];$o[]="+".$p("",($i<$n)*4+$e,"-")."+")$o[]="|".$p("",$e=$i*4+1)."|";foreach($o as$s)echo$p($s,$n*4+3," ",2),"
";
$argv
。:-/
相当混乱,但可以!
fu A(n)
let @z="Vkyjply4lpjy4hp"
exe "norm 2i+\e5i-\eo||\e5i \e".a:n."@zddl4xggd$i_|_|_"
exe "%ce ".(a:n*4+3)
endfu
要叫它:call A(3)
在空缓冲区中。要加载该功能,source cake.vim
2i+<Esc>5i-<Esc>
写第一行 +-----+
o||<Esc>5i<Space><Esc>
| |
在第二行上添加Vkyjply4lpjy4hp
会保存在宏中@z
-直观地选择两条线,将它们拉出,粘贴到下面,并向其添加4个破折号和空格。#@z
重复#
一次ddl4x
删除最后一行,并删除蛋糕底部的破折号,使其与底层的顶部相等ggd$i_|_|_
将第一行替换为蛋糕的顶部 %ce
然后将整个蛋糕居中放置在底层的宽度上!!∫4*I:┌*╗1Ο;@*┐1Ο}⁴¹k┐╔2ΟΚ╚
说明:
∫ } for each in 1..input inclusive, pushing counter
4* multiply by 4
I increase by 1
: duplicate; this will be used later
┌* repeat a dash pop times
╗1Ο encase them in plusses
; get the duplicate on the stacks top
@* repeat a space pop times
┐1Ο encase in vertical bars
⁴ duplicate the item below ToS - the last line
¹ wrap the stack in an array
k remove the arrays first item
┐ push "_"
╔ push "|"
2Ο encase 2 copies of the vertical bar in underscores
Κ and prepend that to the array
╚ center the array horizontally
INPUT n
?SPC(n*2-1)"_|_|_
FOR i=1TO n
s=n*2-i*2
?SPC(s)"|"SPC(i*4+1)"|
?SPC(s-2)"+"STRING$(i*4+(i=n)*4+5,45)"+
NEXT
用蜡烛打印第一行;然后一次将其余的蛋糕打印两行。
INPUT n
PRINT SPC(n * 2 - 1); "_|_|_"
FOR i = 1 TO n
indent = n * 2 - i * 2
PRINT SPC(indent); "|"; SPC(i * 4 + 1); "|"
PRINT SPC(indent - 2); "+"; STRING$(i * 4 + (i = n) * 4 + 5, 45); "+"
NEXT
SPC
在PRINT
语句中使用时,发出给定数量的空格。方便的是,给出了否定的说法时,将其视为0,这样的事实indent - 2
是-2
,在过去的迭代是没有问题的。STRING$
进行计数并输入一个字符代码(此处为,表示45 -
)并重复该字符该次数。在这里,我们必须特意将最后一行(当时i=n
)比其他情况短4个连字符。
i=int(input())