第一种做法:
输出杨辉三角,思路:n行有n个数,每行最后一个数和第一个数均为1,
每行其他的数=上一行对应列数的数值+上一行前一个数
#include<stdio.h>
#define N 10
int main(){
int i,j;
int a[N+1][N+1];//这里为10
for(i=1;i<N+1;i++){ //i从1到10,j从1到i,抛弃0
a[i][1]=1;
a[i][i]=1;
}
for(i=1;i<N+1;i++){//i从1到10,j从2到i-1,抛弃0
for(j=2;j<i;j++){
a[i][j]=a[i-1][j]+a[i-1][j-1];
}
}
//输出,可以只输出部分行列,这里舍弃了第0列和第0行
//i从1到10,j从1到i,抛弃0
for(i=1;i<=10;i++){
for(j=1;j<=i;j++){
printf("%d ",a[i][j]);
}printf("\n");
}
return 0;
}
第二种写法:
数组元素的序号是从0开始算的,所以数组中的0行0列的元素实际上
是杨辉三角形中第1行第1列的数据
#include<stdio.h>
#define N 10
int main(){
int i,j,a[N][N]; //数组为10行10列
for(i=0;i<N;i++){
a[i][i]=1; //使对角线元素的值为1
a[i][0]=1; //使第1列元素的值为1
}
for(i=2;i<N;i++){ //从第3行开始处理
for(j=1;j<=i-1;j++){
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
}
for(i=0;i<N;i++){
for(j=0;j<=i;j++){
printf("%6d",a[i][j]); //输出数组各元素的值
}
printf("\n");
}
printf("\n");
return 0;
}