读书人

这里有道题大侠们给点思路好嘛!该怎

发布时间: 2012-06-05 13:54:06 作者: rapoo

这里有道题,大侠们给点思路好嘛!
利用队列写出打印杨辉三角形的前n行的程序。(杨辉三角形的特点是两个腰上的数字都为1,其它位置上的数字是其上一行中与之相邻的两个整数之和。)
各位大侠给点思路好嘛!

[解决办法]
http://topic.csdn.net/t/20021109/08/1161618.html
[解决办法]

C/C++ code
#include <stdio.h>int main(){    int n,i,k,j = 0,matrix[12][12];//这里最多只容纳12行的杨辉三角    printf("Enter n:");scanf("%d",&n);    k = n - 1;    for (i = 0;i < n;i ++)    {        for (j = 0;j < k;j ++) printf("%3s"," ");        matrix[i][0] = 1;printf("%3d%3s",matrix[i][0]," ");        for (j = 1;j < i;j ++)        {            matrix[i][j] = matrix[i-1][j-1] + matrix[i-1][j];            printf("%3d%3s",matrix[i][j]," ");        }        if(i == 0)        {             printf("\n");        } else { matrix[i][j] = 1;printf("%3d%3s\n",matrix[i][j]," "); }        k --;    }    return 1;}
[解决办法]
#include <stdio.h>
int main()
{
int n,i,k,j = 0,matrix[12][12];//这里最多只容纳12行的杨辉三角
printf("Enter n:");scanf("%d",&n);
k = n - 1;
for (i = 0;i < n;i ++)
{
for (j = 0;j < k;j ++) printf("%3s"," ");
matrix[i][0] = 1;printf("%3d%3s",matrix[i][0]," ");
for (j = 1;j < i;j ++)
{
matrix[i][j] = matrix[i-1][j-1] + matrix[i-1][j];
printf("%3d%3s",matrix[i][j]," ");
}
if(i == 0)
{
printf("\n");
} else { matrix[i][j] = 1;printf("%3d%3s\n",matrix[i][j]," "); }
k --;
}
return 1;
}
C/C++ code
#include <stdio.h>int main(){    int n,i,k,j = 0,matrix[12][12];//这里最多只容纳12行的杨辉三角    printf("Enter n:");scanf("%d",&n);    k = n - 1;    for (i = 0;i < n;i ++)    {        for (j = 0;j < k;j ++) printf("%3s"," ");        matrix[i][0] = 1;printf("%3d%3s",matrix[i][0]," ");        for (j = 1;j < i;j ++)        {            matrix[i][j] = matrix[i-1][j-1] + matrix[i-1][j];            printf("%3d%3s",matrix[i][j]," ");        }        if(i == 0)        {             printf("\n");        } else { matrix[i][j] = 1;printf("%3d%3s\n",matrix[i][j]," "); }        k --;    }    return 1;}
[解决办法]
#include<stdio.h>
define n 10 要打印几行可以改N的数值。
main()
{int i,j,a[n][n] ;
for(i=0;i<=9;i++) 将数组第一列和对角线置0
for(i=0;i<=9;i++)
a[i][j]=a[0][j]=1;
for(i=1;i<=9;i++)
for(i=1;i<=9;i++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i<=9;i++)
for(i=1;i<=9;i++)
prinft("%d",a[i][j]);
}
思路是这样的,、
先将数组第一列和对角线置0;
然后下中间的数就等于前一行同列和前一行的前一列之和
1
11
121 如出2=1+1
1331
13641
输出时注意一下格式就行了。

读书人网 >C语言

热点推荐