首页 > 解决方案 > 如何在 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

                                                                                                                 

我没有得到上面的输出,而是得到了这个:

代码输出

这是我的代码:

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

标签: c#seriespascals-triangle

解决方案


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

  • num在变量和迭代器的帮助下定义的帕斯卡树的深度,i范围从1 to num
  • 帕斯卡树的每一行中的元素都在序列 1,3,5,7.. 中,当与树的深度相关时,它相当于2i-1. 因此行值迭代器的j范围从1 to 2i-1
  • 最后的值(For example 3rd row, 1 3 9 3 1), 可以写成 3 次方 x 的形式,其中 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();
        }
    }
}

推荐阅读