问题描述
我正在尝试打印一个金字塔/帕斯卡三角形,它将以 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
的帮助下定义的帕斯卡树的深度,其范围从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();
}
}
}