| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2319 人关注过本帖
标题:[讨论]关于用C++实现杨辉三角形
只看楼主 加入收藏
toms
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-9-19
收藏
 问题点数:0 回复次数:6 
[讨论]关于用C++实现杨辉三角形
用二维数组实现一个杨辉三角形,并显示出来.
如下,显示一个10行的杨辉三角.
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
1 5 10 10 5 1
1 6 15 20 15 6 1
1 7 21 35 35 21 7 1
1 8 28 56 70 56 28 8 1
1 9 36 84 126 126 84 36 9 1

下面是自己编的一个程序,总觉得这个程序有点复杂,想在这里请教一下各位高手,有没有更简单一些的.
由于本人水平有限,改了好久还是改不好.希望大家帮助.谢谢了.

#include<stdio.h>
int main()
{
int num[10][10]={1};
int i,j;
printf("%4d",num[0][0]);
for(i=1;i<=9;i++)
{
printf("\n");
for(j=0;j<=i;j++)
{
if(j>=1&&j<=i-1)
{
num[i][j]=num[i-1][j-1]+num[i-1][j];
printf("%4d",num[i][j]);
}
if(j==0)
{
num[i][j]=num[i-1][j];
printf("%4d",num[i][j]);
}
if(j==i)
{
num[i][j]=num[i-1][j-1];
printf("%4d",num[i][j]);
}
}
}
printf("\n");
return 0;
}

搜索更多相关主题的帖子: 杨辉三角 讨论 
2007-11-16 19:19
h13077395959
Rank: 1
等 级:新手上路
威 望:1
帖 子:26
专家分:0
注 册:2007-11-16
收藏
得分:0 

你的程序很不错,杨辉三角的特点用上了。
可以试从另外的特点加以改进算法:

第一列和对较线都为1,可直接赋值1
第二列和紧靠对角线的斜边为123456789;
每一行的数字是对称的。

2007-11-16 19:54
h13077395959
Rank: 1
等 级:新手上路
威 望:1
帖 子:26
专家分:0
注 册:2007-11-16
收藏
得分:0 
<引用别人结果,特此声明>
本程序应是根据以上递归的数学表达式编制的。
*程序说明与注释
#include<stdio.h>
int main()
{
int i,j,n=13;
printf("N=");
while(n>12)
scanf("%d",&n); /*控制输入正确的值以保证屏幕显示的图形正确*/
for(i=0;i<=n;i++) /*控制输出N行*/
{
for(j-0;j<24-2*i;j++) printf(" "); /*控制输出第i行前面的空格*/
for(j=1;j<i+2;j++) printf("%4d",c(i,j)); /*输出第i行的第j个值*/
printf("\n");
}
}

void int c(int x,int y) /*求杨辉三角形中第x行第y列的值*/
{
int z;
if((y==1)||(y==x+1)) return 1; /*若为x行的第1或第x+1列,则输出1*/
z=c(x-1,y-1)+c(x-1,y); /*否则,其值为前一行中第y-1列与第y列值之和*/
return z;
}
2007-11-16 20:11
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 
LS,人家要求用二维数组呢……虽然你用递归也很好……
#include<stdio.h>
int main(){
int a[10][10]={1},i,j;
for(i=0;i<10;i++){
for(j=0;j<=i;j++){
if(i==0 || j==0 || i==j)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%4d",a[i][j]);
}
putchar('\n');
}
getchar();
return 0;
}

这是我的答案,原理和LZ的一样。

专心编程………
飞燕算法初级群:3996098
我的Blog
2007-11-16 20:31
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
收藏
得分:0 

抱歉啊,上面的程序的i==0其实是不需要的……现改过……
不过似乎浪费了一半的空间……用三角矩阵的方法可以解决这个问题,但是那样的话就不是二维数组了……你们老师出的题可真是毒啊,想优化都做不到……

#include<stdio.h>
int main() {
int a[10][10]={0},i,j;
for (i=0;i<10;i++) {
for (j=0;j<=i;j++) {
if (j==0 || i==j)
a[i][j]=1;
else
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("%4d",a[i][j]);
}
putchar('\n');
}
getchar();
return 0;
}




另外,LZ不是要简单精炼的代码吗?这里有个超精炼的,嘿嘿,只是玩玩,可千万别照我这么写……交作业还是可以的~~这个代码还随便做了下简单的输出排版,看着舒服点,纯粹的无聊之作(不过这也是我喜欢用printf而不是cout的原因之一)

#include<stdio.h>
void main() {
int a[10][10]={0},i,j;
for (i=0;i<10;putchar('\n'),i++)
for (j=0;j<=i;j++) {
a[i][j]=!j||i==j?1:a[i-1][j-1]+a[i-1][j];
printf("%*d",!j?10-i<<1:4,a[i][j]);
}
}

[此贴子已经被作者于2007-11-16 22:05:37编辑过]


专心编程………
飞燕算法初级群:3996098
我的Blog
2007-11-16 20:56
toms
Rank: 1
等 级:新手上路
帖 子:21
专家分:0
注 册:2007-9-19
收藏
得分:0 
回复:(StarWing83)抱歉啊,上面的程序的i==0其实是...

强悍,我改了那么久也没改出好的,居然你一下子就搞定了,看来我要好好象各位学习了,
尤其那个超级精练的代码,简直太完美了,我得好好学习学习.
实在太感谢了.谢谢了.


2007-11-17 12:03
lusan168
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:50
专家分:0
注 册:2007-11-17
收藏
得分:0 
我觉得做这种题,要有比较好的,观察能力,嘿嘿
2007-11-17 16:25
快速回复:[讨论]关于用C++实现杨辉三角形
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022736 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved