创建特定模式时遇到困难

时间:2019-05-15 11:29:48

标签: c#

伙计们,我在用C#创建某种类型的形状时遇到了麻烦,这种形状看起来像是带有两个三角形图案的

*****
****
***
**
*
*
**
***
****
*****

我设法创建了一个倒置的直角三角形图案,但我似乎无法弄清楚如何在其下方创建一个直角三角形星形图案。

这是我设法制作的代码:

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

namespace Hello_Word
{
    class Program
    {
        static void Main(string[] args)
        {
            int val = 5;
            int i, j, k;
            for (i = 1; i <= val; i++)
            {
                for (j = 1; j <= val - i; j++)
                {
                    // Console.Write(" ");  
                }
                for (k = 1; k <= j; k++)
                {
                    Console.Write("*");
                }
                Console.WriteLine("");
            }

            Console.ReadLine();
        }
    }
}

4 个答案:

答案 0 :(得分:1)

您已经知道如何打印从最宽到最窄的所有行。您只想做同样的事情,但是倒退-从窄处开始,然后宽幅打印:

for (i = val; i >= 1; i--)

如何使用此功能取决于您。我将循环的内部放入函数中,所以main变为:

for (i = 1; i <= val; i++) printLine(i,val);
for (i = val; i >= 1; i--) printLine(i,val);

答案 1 :(得分:1)

这是一个非常简单的作业问题-希望您喜欢此解决方案:

using System;

class Program {
    const Int32 maxTriangleSize = 5;

    static void Main(string[] args) {
        for (Int32 i = maxTriangleSize - 1; i >= 0; i--) {
            Console.WriteLine(new String('*', i + 1));
        }

        for (Int32 i = 0; i < maxTriangleSize; i++) {
            Console.WriteLine(new String('*', i + 1));
        }

        Console.ReadLine();
    }
}

答案 2 :(得分:0)

您没有指定任何要求。它在哪里说您不能只使用一堆WriteLine()调用?

Console.WriteLine("*****");
Console.WriteLine("****");
Console.WriteLine("***");
Console.WriteLine("**");
Console.WriteLine("*");
Console.WriteLine("*");
Console.WriteLine("**");
Console.WriteLine("***");
Console.WriteLine("****");
Console.WriteLine("*****");

您必须使用For循环吗?而While循环又如何呢?等等...

考虑到这一点,这是一个递归的解决方案:

static void Main(string[] args)
{
    RecursiveTriangle(5);         
    Console.ReadLine();
}

static void RecursiveTriangle(int width)
{
    if (width > 0)
    {
        string row = new string('*', width);
        Console.WriteLine(row);
        RecursiveTriangle(--width);
        Console.WriteLine(row);
    }
}

一个变体:

static void Main(string[] args)
{
    RecursiveTriangle(new String('*', 5));
    Console.ReadLine();
}

static void RecursiveTriangle(string row)
{
    if (row.Length > 0)
    {
        Console.WriteLine(row);
        RecursiveTriangle(row.Substring(0, row.Length - 1));
        Console.WriteLine(row);
    }
}

输出: enter image description here

如果有限制或要求,请确保下次也要发布。

答案 3 :(得分:0)

随着每行中的恒星数量以恒定数量减少,您可以将它们一起打印。您可以从递增数字开始,然后使用另一个循环递减计数器。 我已经测试了以下代码,它似乎可以正常工作。

static void Main(string[] args)
        {
            int val = 5;
            for (int m = val; m > 0; m--)
            {
                Console.WriteLine(new string('*', m));
            }
            for (int n = 1; n <= 5; n++)
            {
                Console.WriteLine(new string('*', n));
            }
            Console.ReadLine();
        }