HDU~2032
杨辉三角
2 3
1 1 1 1 1 1 1 2 1
代码:
#include<stdio.h> int a[30],b[30]; int main() { int n,flag,i,k; a[0]=b[0]=1; while(scanf("%d",&n)==1){ flag=1; for(k=1;k<=n;k++){ if(k==1) printf("1\n"); //输出第一列的1 else printf("1 "); for(i=1;i<k-1;i++){ if(flag) {b[i]=a[i-1]+a[i]; printf("%d ",b[i]); } //计算第2列到第k-1列,并输出 else {a[i]=b[i-1]+b[i];printf("%d ",a[i]);} //交替使用a,b数组 } if(flag) b[k-1]=1; else a[k-1]=1; if(k-1>0) printf("1\n"); //特别注意,k=1时的特殊情况,此时不要输出1 flag=!flag; //交替条件 } printf("\n"); } return 0; }
注:此题如果开一个30*30的数组,那么我觉得毫无意思了。我们做题目的,就应该想方设法降低时间复杂度和空间复杂度。这题我觉得就可以开两个30的数组来实现!