【问题标题】:print pascal triangle values in a single loop在单个循环中打印帕斯卡三角形值
【发布时间】:2020-10-18 08:32:45
【问题描述】:
public void PrintPascalTriangle(int inNumberOfLines)
    {
        int noOfLines = inNumberOfLines;
        int number = 1;
        for(int i=0;i<noOfLines;i++)
        {
            
            number = 1;
            for(int j=0;j<=i;j++)
            {
                Console.Write(number + " ");
                number = number * (i - j) / (j + 1);

            }
        }

    }

如何将此方法转换为单循环并在单行中打印值?

我只需要连续的帕斯卡三角形值(无需担心空格或视觉代表)直到 n。

【问题讨论】:

  • 如何将两个循环合二为一并期望得到准确的结果?
  • 现在不需要精确的结果,我只需要连续的帕斯卡三角形值(无需担心空格或视觉代表)直到 n。

标签: c# for-loop logic time-complexity


【解决方案1】:

帕斯卡三角形的行都是“the combinatorial function”、n!/[k!( n-k)!] 的值,对于固定的 n。组合函数可以如下高效计算,参见Choose函数,其中I ripped from this answer

class Program
{
    static int Choose(int n, int k)
    {
        if (k > n)
            return 0;

        if (k * 2 > n)
            k = n - k;

        if (k == 0)
            return 1;

        int result = n;
        for (int i = 2; i <= k; ++i)
        {
            result *= (n - i + 1);
            result /= i;
        }
        return result;
    }

    static List<int> RowOfPascalsTriangle(int n)
    {
        return Enumerable.Range(0, n).Select(k => Choose(n-1, k)).ToList();
    }

    static void Main(string[] args)
    {
        Console.WriteLine(string.Join(" ", RowOfPascalsTriangle(1)));
        Console.WriteLine(string.Join(" ", RowOfPascalsTriangle(2)));
        Console.WriteLine(string.Join(" ", RowOfPascalsTriangle(3)));
        Console.WriteLine(string.Join(" ", RowOfPascalsTriangle(4)));
        Console.WriteLine(string.Join(" ", RowOfPascalsTriangle(5)));
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    相关资源
    最近更新 更多