绘制垂直金字塔

时间:2013-02-13 10:05:39

标签: c# console

我在这里遇到一些问题,我想绘制一个像这样的垂直金字塔:

O
OO
OOO
OOOO
OOOOO
OOOO
OOO
OO
O

但我似乎无法弄明白该怎么做。我得到的只是:

O
OO
OOO
OOOO
OOOOO
OOOOOO
OOOOOOO
OOOOOOOO
OOOOOOOOO

这是我的代码:

int width = 5;

  for (int y = 1; y < width * 2; y++)
  {
    for (int x = 0; x < y; x++)
    {
      Console.Write("O");
    }
    Console.WriteLine();

  }

3 个答案:

答案 0 :(得分:3)

有两种循环方法可以做到这一点,但这里有一种方法可以使用一个循环,而没有if条件:

for (int y = 1; y < width * 2; y++)
{
    int numOs = width - Math.Abs(width - y);
    for (int x = 0; x < numOs; x++)
    {
        Console.Write("O");
    }
    Console.WriteLine();
}

答案 1 :(得分:1)

使用此代码可能很有用

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication59
{
    class Program
    {
        static void Main(string[] args)
        {
            int numberoflayer = 6, Space, Number;
            Console.WriteLine("Print paramid");
            for (int i = 1; i <= numberoflayer; i++) // Total number of layer for pramid
            {
                for (Space = 1; Space <= (numberoflayer - i); Space++)  // Loop For Space
                    Console.Write(" ");
                for (Number = 1; Number <= i; Number++) //increase the value
                    Console.Write(Number);
                for (Number = (i - 1); Number >= 1; Number--)  //decrease the value
                    Console.Write(Number);
                Console.WriteLine();
                }
            }
    }
}

答案 2 :(得分:1)

这是一个极简主义的方法,只有一个循环和一个三元表达式(?)而不是if

        int width = 5;
        for (int y = 1; y < width * 2; y++)
            Console.WriteLine(String.Empty.PadLeft(y < width ? y : width * 2 - y, 'O'));

或没有支票的版本:

        for (int y = 1; y < width * 2; y++)
            Console.WriteLine(String.Empty.PadLeft(Math.Abs(width * (y / width) - (y % width)), 'O'));