我如何在 C# 中修改这个嵌套的 for 循环?

How can i modify this nested for loop in C#?

我正在尝试打印出一个 pyramid/Pascal 三角形,它将以 3 个为一组输出。您可以在下面的示例中看到它。

                               1
                           1   3   1
                       1   3   9   3   1
                   1   3   9   27  9   3   1
               1   3   9   27  81  27  9   3   1
           1   3   9   27  81  243 81  27  9   3  1
      1    3   9   27   81  243 729 243 81  27  9  3  1
  1   3   9   27  81   243 729 2187 729 243 81 27  9  3   1

                                                                                                                 

我得到的不是上面的输出,而是这个:

这是我的代码:

using System;

namespace ConsoleApp
{
    class PiscalTriangle
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter length : ");
            int num = Convert.ToInt32(Console.ReadLine());
            for (int i = 0; i < num; i++)
            {
                for (int j = num; j > i; j--)
                {
                    Console.Write("  ");
                }
                int val = 1;
                for (int j = 0; j <= i; j++)
                {
                    Console.Write(val + "   ");
                    val = val * (i - j) / (j + 1);
                }
                Console.WriteLine();
            }
            Console.ReadLine();
        }
    }
}

要生成所需的输出,需要考虑三个主要方面:

  • num 变量和迭代器 i 的帮助下定义的 pascal 树的深度,范围从 1 to num
  • pascal 树的每一行中的元素都在序列 1,3,5,7.. 中,当与树的深度相关时,相当于 2i-1。因此,行值迭代器 j 的范围从 1 to 2i-1
  • 最后的值(For example 3rd row, 1 3 9 3 1)可以写成x的3次方的形式,其中x从0增加到i然后减少到0

通过总结这3个条件,我们可以得到我们想要的输出。

using System;

namespace ConsoleApp
{
    class PiscalTriangle
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Enter length : ");
            int num = Convert.ToInt32(Console.ReadLine());
            
            for (int i = 1; i <= num; i++)
            {
                for (int j = num; j > i; j--)
                {
                    Console.Write("  ");
                }
                var x = 0;
                for (double j = 1; j <= 2*i-1; j++)
                {
                    double val = Math.Pow(3, x);
                    Console.Write(val + " ");
                    if(j < i)
                    {
                        x++;
                    }
                    else
                    {
                        x--;
                    }
                }
                Console.WriteLine();
            }
            Console.ReadLine();
        }
    }
}