3

此 ruby​​ 代码生成一个金字塔:

w = 20
1.upto(w) { |i| puts ">"+" "*(w-i)+"."*i*2+" "*(w-i)+"<" }

像这样:

>                   ..                   <
>                  ....                  <
>                 ......                 <
>                ........                <
>               ..........               <
>              ............              <
>             ..............             <
>            ................            <
>           ..................           <
>          ....................          <
>         ......................         <
>        ........................        <
>       ..........................       <
>      ............................      <
>     ..............................     <
>    ................................    <
>   ..................................   <
>  ....................................  <
> ...................................... <
>........................................<

我想让金字塔在顶部有一个点而不是两个(目前是因为"."*i*2使它对称)。

我怎样才能做到这一点?

4

4 回答 4

2
w=20; 1.upto(w) { |i| puts ">"+" "*(w-i)+"."*(i*2-1)+" "*(w-i)+"<" }
于 2013-01-06T00:37:15.370 回答
1

您使用的是固定宽度的字体,因此无法在当前金字塔上方获得一个句点。您需要使用奇数个点而不是偶数:

w = 20
1.upto(w) do |i|
  spaces = " " * (w-i)
  dots   = "." * (i*2 - 1) # Use one fewer dot per line, starting with one dot
  puts ">" + spaces + dots + spaces + "<"
end

这会产生:

>                   .                   <
>                  ...                  <
>                 .....                 <
>                .......                <
>               .........               <
>              ...........              <
>             .............             <
>            ...............            <
>           .................           <
>          ...................          <
>         .....................         <
>        .......................        <
>       .........................       <
>      ...........................      <
>     .............................     <
>    ...............................    <
>   .................................   <
>  ...................................  <
> ..................................... <
>.......................................<
于 2013-01-06T00:40:12.550 回答
1

使用times会使它更干净。此外,还有center简化事情的方法:

20.times{|i| puts ">#{("."*(i*2+1)).center(39)}<"}
于 2013-01-06T05:13:53.190 回答
0
S, W = ' ', 20; 1.upto(W) {|i| n = W - i; puts ">#{S*n + '.' * (2*i - 1) + S*n}<"}
于 2013-01-06T02:41:09.557 回答