HDU2032杨辉三角
(其实我就是个渣渣也没什么好讲的是不是)
还记得杨辉三角这个奇怪的东西嘛
具体的定义这里就不说了,大概如下
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
好的,废话不多说,大概就这样哒
Input
输入数据包含多个测试实例,每个测试实例的输入只包含一个正整数n(1<=n<=30),表示将要输出的杨辉三角的层数。
Output
对应于每一个输入,请输出相应层数的杨辉三角,每一层的整数之间用一个空格隔开,每一个杨辉三角后面加一个空行。
问题见上文
问题分析:这里给出两个版本的程序,分别用一维数组和二维数组来存储杨辉三角。使用二维数组存储杨辉三角,可以实现一次计算多次使用。使用一维数组存储杨辉三角,需要更高的技巧。编程时候,需要注意空格输出的条件。
AC的C语言程序如下(使用二维数组的版本):
1 /* HDU2032 杨辉三角 */ 2 3 #include <stdio.h> 4 5 int pascal[30+1][30+1]; 6 7 // 使用二维数组的杨辉三角程序 8 void pascalgo(int n) 9 { 10 int i, j; 11 12 for(i=0; i<n; i++) 13 for(j=0; j<=i; j++) 14 if(j == 0 || j == i) 15 pascal[i][j] = 1; 16 else 17 pascal[i][j] = pascal[i-1][j] +pascal[i-1][j-1]; 18 } 19 20 void pascalprint(int n) 21 { 22 int i, j; 23 24 for(i=0; i<n; i++) { 25 for(j=0; j<=i; j++) { 26 if(j != 0) 27 printf(" "); 28 printf("%d", pascal[i][j]); 29 } 30 printf("\n"); 31 } 32 } 33 34 int main(void) 35 { 36 int n; 37 38 pascalgo(30); 39 40 while(scanf("%d", &n) != EOF) { 41 pascalprint(n); 42 printf("\n"); 43 } 44 45 return 0; 46 }
emmm上面是二维数组的版本,康康又是奇奇怪怪的代码
AC的C语言程序如下(使用一维数组的版本):
1 /* HDU2032 杨辉三角 */ 2 3 #include <stdio.h> 4 5 int pascal[30+1]; 6 7 // 使用一维数组的杨辉三角程序 8 void pascalgo(int n) 9 { 10 int i, j; 11 12 for(i=0; i<n; i++) { 13 for(j=i; j>=0; j--) { 14 if(j == i || j == 0) 15 pascal[j] = 1; 16 else 17 pascal[j] += pascal[j-1]; 18 if(j != i) 19 printf(" "); 20 printf("%d", pascal[j]); 21 } 22 printf("\n"); 23 } 24 } 25 26 int main(void) 27 { 28 int n; 29 30 while(scanf("%d", &n) != EOF) { 31 pascalgo(n); 32 printf("\n"); 33 } 34 35 return 0; 36 }
大概就这样啦,各位掰掰~

浙公网安备 33010602011771号