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

问题描述

我正在尝试打印一个金字塔/帕斯卡三角形,它将以 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

                                                                                                                 

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

code output

这是我的代码

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 的帮助下定义的帕斯卡树的深度,其范围从 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立>

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

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