队列打印杨辉三角,不懂啊,急

发布网友 发布时间:2024-10-23 10:14

我来回答

2个回答

热心网友 时间:2024-10-24 11:15

用C语言写的杨辉三角形程序网上多的是,你何必非要找这个模板的呢

void YangVI(int n){
SepQueue<int> q(n+2); //第n行只有n+1个元素,所以设队列容量为n+2没问题
int i=1,j,s=0,k=0,t,u;
q.EnQueue(i); q.EnQueue(i);//先将第一行两个1入队列
for(i=1;i<=n;i++){
cout<<endl;
q.EnQueue(k); //k始终是0,这步相当于在上一行的最右边加了个0,保证当前行的最右边的1,可以用上一行的1+0得到
for(int f=i;f<n;f++)
cout<<' '; //每行前面都要输出一定的空格,以保证三角形输出时左右对称
for(j=1;j<=i+2;j++){
q.DeQueue(t);//取出上一行的元素(第一个肯定是1,最后一个是0)
u=s+t; //s初始化为0,而且下面的s=t这句在循环最后一步时,因为t是0,所以s又还原为0,以保证每一行第一个1,由上一行的1和添加的0相加得到.
q.EnQueue(u); //和入队列
s=t; //s存放刚才相加的两个数中右边那个,在下一个加法操作时正好用作左边的加数
if(j!=i+2) cout<<s<<' '; //输出上一行的元素,其中最后一个0不能输出
}
}
cout<<endl;
};

热心网友 时间:2024-10-24 11:16

用数组解决啊
public class YangHui
{
public static void main(String args[])
{
int i,j,space,n;
n=10;//为了省事,没有从命令行参数取值。
int a[][]=new int[n][];
a[0]=new int[1];
for(i=1;i<n;i++) a[i]=new int[i+1];
a[0][0]=1;
for(i=1;i<n;i++)
{
a[i][0]=1;//行首1
a[i][a[i].length-1]=1;//行尾1
for(j=1;j<a[i].length-1;j++) //肩上两数之和
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
for(i=0;i<n;i++)
{
for(space=n-i;space>0;space=space-1)
{
System.out.print("\t");
}
for(j=0;j<a[i].length;j++)
{
System.out.print(a[i][j]+"\t\t");
}
System.out.println();
}
}
}
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com