如何用C++打印楊輝三角


     下面是楊輝三角的一部分,我們觀察觀察它有什么規律:

                             1

                         1      1

                      1     2     1

                  1     3     3     1

               1     4     6     4     1

            1     5    10    10    5    1

         1     6    15    20   15    6    1

     1     7     21    35   35   21   7    1

                    ................

     通過觀察不難發現,三角的兩邊都是1,而且除邊界外的每個數的值都是其兩肩數的和,楊輝三角與二項式定理有密切關系,當(a+b)n

中n的取值分別為0,1,2,3,4.....時,其各項系數分別對應楊輝三角的第1,2,3,4,5.....行,二項式公式為:

 啊

 

由此得出一個非常重要的規律:在楊輝三角中,令上面公式中的n為n-1,令r為k-1,得出的值為楊輝三角中第n行第k個數的值,也就是

Ck-1n-1 = (n-1)!/((k-1)!*(n-k)!)。為了輸出美觀,我們要在每行的左邊打印空格,假設我們要打印楊輝三角的前num行,如果最后一行,

也就是最長的一行前不打印空格,則第n行前的空格個數為num-n個。

      有了這些知識后就可以寫代碼了,完整的代碼如下:

 1 #include<iostream>
 2 
 3 //求階乘的函數
 4 int factorial(int num)
 5 {
 6     if (num == 0)
 7         return 1;
 8     else
 9     {
10         int result = 1;
11         for (int i = 1; i <= num; ++i)
12             result *= i;
13         return result;
14     }
15 }
16 
17 //打印楊輝三角的函數
18 void function(int rowNum)
19 {
20     int value;
21     for (int n = 1; n <= rowNum; ++n) //對於每一行
22     {
23         for (int i = 0; i <= rowNum - n; ++i)  //打印每行前的空格
24             std::cout << " ";
25         for (int k = 1; k <= n; ++k)  //打印每行的每個數
26         {
27             value = factorial(n - 1) / (factorial(k - 1)*factorial(n - k));
28             std::cout << value << " ";
29         }
30         std::cout << std::endl;
31     }
32 }
33 
34 int main()
35 {
36     int lineNum;
37     std::cout << "請輸入要打印的行數:" << std::endl;
38     std::cin >> lineNum;
39     function(lineNum);
40     system("pause");
41     return 0;
42 }

     注意:以上代碼只能打印前13行的楊輝三角,原因在於求階乘的函數,我們在求階乘的函數中聲明和返回的變量類型為int型,

在32位機器中int型變量表示數的有效范圍是-2^32~2^32-1,而13的階乘超出了int的表示范圍。所以如果你需要打印出更多行

楊輝三角,可以聲明變量類型為long或者long long。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM