您的位置:首页 > 编程语言 > C语言/C++

杨辉三角

2016-05-25 15:57 507 查看
百科:链接

前10列:



递归法:

#include <stdio.h>
#include <stdlib.h>

//计算杨辉三角数
int Fun(int i, int j)
{
if (0 == j || i == j)
return 1;
return Fun(i - 1, j - 1) + Fun(i - 1, j);
}

int main()
{
int n;
while(scanf("%d", &n)){
system("cls");
printf("%d行杨辉三角:\n", n);
for (int i = 0; i < n; i++)
{
for (int j = n - i - 1; j > 0; j--)
printf("   ");
for (int j = 0; j <= i; j++)
printf("%-3d   ", Fun(i, j));
printf("\n");
}
printf("\n");
}
return 0;
}


动态规划法:

#include <stdio.h>
#include <stdlib.h>
#define MAX_N 1000

//计算杨辉三角数 (动态规划记录,速度快但牺牲空间为代价)
int Fun(int i, int j)
{
static int dp[MAX_N][MAX_N] = {0};
if(dp[i][j])
return dp[i][j];
if (0 == j || i == j)
return dp[i][j] = 1;
return dp[i][j] = Fun(i - 1, j - 1) + Fun(i - 1, j);
}

int main()
{
int n;
while(scanf("%d", &n)){
system("cls");
printf("%d行杨辉三角:\n", n);
for (int i = 0; i < n; i++)
{
for (int j = n - i - 1; j > 0; j--)
printf("   ");
for (int j = 0; j <= i; j++)
printf("%-3d   ", Fun(i, j));
printf("\n");
}
printf("\n");
}
return 0;
}


排列组合规律法:

第i,j列个数为C(i, j)(i>=j>=0)

#include <stdio.h>
#include <stdlib.h>

//计算杨辉三角数
int Fun(int n, int m)
{
int res = 1;
for(int i = 1; i <= m; i ++){
res = res * (n - i + 1) / i;
}
return res;
}

int main()
{
int n;
while(scanf("%d", &n)){
system("cls");
printf("%d行杨辉三角:\n", n);
for (int i = 0; i < n; i++)
{
for (int j = n - i - 1; j > 0; j--)
printf("   ");
for (int j = 0; j <= i; j++)
printf("%-3d   ", Fun(i, j));
printf("\n");
}
printf("\n");
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C语言 算法