2

我这里有个小问题,我想画一个像这样的垂直金字塔:

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();

  }
4

3 回答 3

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();
}
于 2013-02-13T10:14:22.977 回答
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();
                }
            }
    }
}
于 2013-02-13T10:09:13.557 回答
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'));
于 2013-02-13T11:10:27.800 回答