C++编写倒置的杨辉三角,用C++

Description:贝贝的妹妹叫妞妞,妞妞喜欢图形,而且总是喜欢把图形倒过来欣赏。有一次,她看见杨辉三角形了,觉得很新鲜,于是就把它们大大小小地摆列出来了,好不得意哦... Description:
贝贝的妹妹叫妞妞,妞妞喜欢图形,而且总是喜欢把图形倒过来欣赏。有一次,她看见杨辉三角形了,觉得很新鲜,于是就把它们大大小小地摆列出来了,好不得意哦。妞妞是个小孩,图形的摆布都是手工完成的,相信你可以编程来做,比她做得更快更好。

Input:
输入数据中包含了不多于50个的整数n(1≤n≤10)。
Output:
以n为行数,其打印出的倒杨辉三角形(每个数据占三个字符)就是妞妞所喜欢的。每个倒三角形之间没有空行,见样本输出。
Sample Input:
5
3
Sample Output:
1 4 6 4 1
1 3 3 1
1 2 1
1 1
1
1 2 1
1 1
1
展开
 我来答
xiaozhan04
推荐于2017-12-16 · 超过11用户采纳过TA的回答
知道答主
回答量:49
采纳率:0%
帮助的人:30.2万
展开全部
昨天晚上看到了这题,今天才想出来答案~写得不好,不过是我自己写的~~也贴出来吧~~嘿嘿
#include<iostream>
using namespace std;
//===================================================
void main()
{
int *source1,*source2,n,i,temp1,temp2,j,k;
cin>>n;
n+=1;
source1=new int[n];
source2=new int[n];
for(i=1;i<n;i++)
{
source1[i]=0;
source2[i]=0;
}
source1[0]=source2[0]=1;//把source1[0]和source2[0]都置1其他的都置零

for(i=0;i<n;i++)
{
for(j=1;j<i+n;j++)
{
source1[j]=source2[j]+source2[j-1];
}
for(j=0;j<i;j++)
source2[j]=source1[j];//source2为temp

}//计算最后一组数
for(i=n;i>=2;i--)
{
for(k=0;k<i-1;k++)
cout<<source2[k]<<" ";
cout<<endl;//输出
for(j=1;j<i;j++)
{
source2[j]=source1[j]-source2[j-1];
}//计算回来,完成倒序
for(j=0;j<i;j++)
source1[j]=source2[j];//source1位temp

}

}
具体思路就是两个数组,一个做temp。另一个在这个的基础上完成向上或向下的计算
东莞市易合传动科技有限公司
2024-11-06 广告
重载旋转平台是我们东莞市易合传动科技有限公司的明星产品之一。该平台采用高强度材料制造,具有卓越的承载能力和稳定性,能够承受极大的径向和轴向负载。其设计精密,旋转灵活,运转平稳,广泛应用于工业自动化、机器人、机床等领域。我们致力于为客户提供优... 点击进入详情页
本回答由东莞市易合传动科技有限公司提供
匿名用户
2006-11-01
展开全部
#include <iostream>
#include <cstdlib>
using namespace std;

int getYanghui(int line, int index) {
if(index == 0 || index == line -1 )
return 1;
if(line == 1 || line == 2)
return 1;
return getYanghui(line - 1, index -1) + getYanghui(line - 1, index);
}

int main(int argc, char* argv[]) {
int len = 0;
if(argc > 1) {
len = atoi(argv[1]);
}
if(len == 0) {
cout << "Please enter a number:" << endl;
cin >> len;
}
if(len <= 0 || len > 50) {
cout << "Need a number between 1 and 50" << endl;
return 1;
}
for(int i = len; i >= 1 ; i--) {
for(int j = 0; j < i; j++ ) {
cout << getYanghui(i,j) << " ";
}
cout << endl;
}
return 0;
}

//虽然算法差了点,但也可以实现

//下面这个版本速度会快很多
//算法没修改过,只是加了个缓存
#include <iostream>
#include <cstdlib>
using namespace std;

int* buf;
int num;

int getYanghui(int line, int index) {
if(index == 0 || index == line -1 )
return 1;
if(line == 1 || line == 2)
return 1;
int res = 0;
int linenum = (line-1) * num + index;
if(buf[linenum] == 0) {
res = getYanghui(line - 1, index -1) + getYanghui(line - 1, index);
buf[linenum] = res;
} else {
res = buf[linenum];
}
return res;
}

int main(int argc, char* argv[]) {
int len = 0;
if(argc > 1) {
len = atoi(argv[1]);
}
if(len == 0) {
cout << "Please enter a number:" << endl;
cin >> len;
}
if(len <= 0 || len > 50) {
cout << "Need a number between 1 and 50" << endl;
return 1;
}
num = len;
buf = new int[len*len];
memset(buf, 0, len*len );
for(int i = len; i >= 1 ; i--) {
for(int j = 0; j < i; j++ ) {
cout << getYanghui(i,j) << " ";
}
cout << endl;
}
delete[] buf;
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式