满意答案
wi8whj83s
2013.05.23
采纳率:52% 等级:12
已帮助:5419人
#include
#include
int main ()
{
int row=0,k=0,m=0,x=0,S=0;//行,列变量
int *n;
void buildup (int S,int *n);
void putout (int S,int *n);
printf("Please enter the row bunber:");
while(!scanf("%d",&S))
printf("The data you entered is wrong! \n please enter again!");
n = (int*)malloc((S+1)*(S/2)*sizeof(int)); //根据输入的S行数,分配三角形数组所占内存大小
buildup(S,n);
putout (S,n);
return 0;
}
void buildup(int S,int *n)
{
int row=0,k=0,m=0,x=0,y=0,a=0,b=0;//row是行变量,k是起调节作用的变量,x,y分别是肩上数字的序号变量,a,b是行首行尾变量
for(m=0;m
{
n[m]=0;
}
for(row=1;row<=S;row++)//三角形的左边的1
{
m=((row*(row-1))/2);
n[m]=1;
}
for(row=1;row<=S;row++)//三角形右边的1
{
m=((row*(row+1))/2)-1;
n[m]=1;
}
//-------------------稍微关键点的就是这步------------------------------
for(k=2;k<=S-1;k++)
{
for(row=(3+k-2);row<=S;row++)
{
m = ((row*(row-1))/2)-1+k;
x = m-row;
y = m-row+1;
a = ((row*(row+1))/2)-row;//行首
b = ((row*(row+1))/2)-1;//行尾
if((m!=a) && (m!=b))
{
n[m] = n[x]+n[y];
}
else
n[m] = 1;
}
}
//----------------------------------------------------------------------
}
void putout(int S,int*n)
{
int row=0,blank=0,rank=0,num=0;
for(row=1;row<=S;row++)//输出
{
if(row==1)
for(blank=1;blank<=4*(S-row);blank++)
printf(" ");
else
for(blank=1;blank<=S-row;blank++)
printf(" ");
for(rank=1;rank<=row;rank++)
{
printf("%d ",n[num]);
num++;
if(rank==row)
printf("\n");
printf(" ");
}
}
}
00分享举报