我需要构建一个看起来像这样的树:

因此,我从用户那里获取了 2 个数字,a并且b. a定义行数,并b定义起始根节点值。所以如果我有a=5 和b=3,那么我们得到:

我基本上只是将它打印到控制台。我真的迷失了如何开始。谁能在正确的方向上给我一点推动?
我需要构建一个看起来像这样的树:

因此,我从用户那里获取了 2 个数字,a并且b. a定义行数,并b定义起始根节点值。所以如果我有a=5 和b=3,那么我们得到:

我基本上只是将它打印到控制台。我真的迷失了如何开始。谁能在正确的方向上给我一点推动?
这是帕斯卡三角形,第 n 行第 k 列的值为 b *(n 选择 k),其中 n 和 k 都是零索引,并且(n 选择 k)= n!/ (k! * (nk)!)
一旦你弄清楚了这一点,那么解决问题的方法就是编写一个函数int choose(int n, int k)并在控制台上布置正方形。
布局是最难的部分,但这里有一个方法:
int choose(int n, int k)printf("%-*d ", W, b * choose(n, k));它们以保持它们对齐。一种方法可能是向下“增长”树......给定行数,您可以计算出树中有多少元素并分配适当大小的数组。
然后从顶部开始,假设行从 1 开始编号,down_left(x) = x + row(x)其中x是数组索引,row(x)是所属行号x。down_right(x) = down_left(x) + 1.
从顶部开始,然后向下左和向下右。然后对于您刚刚创建的下一行中的每个元素执行相同的操作,除了添加到下面的行以获得“父”数字的累积效果。
例如,如果用户要求 3 行和 3 的根值。
您知道您将需要 6 个数组元素。分配 6 个元素并将它们归零。
第 1 行:放入3数组 [0]。第 n 行:通过查看前一行中的每个元素来创建,称为 i。然后做array[down_left(i)] += i和array[down_right(i)] += i。这将创建第 n 行。重复。
无论如何,这是一个粗略的想法,玩一玩,看看它会把你带到哪里...... :)