求助高手杨辉三角

[复制链接]
查看11 | 回复3 | 2011-10-31 11:32:39 | 显示全部楼层 |阅读模式
#includeiostream#includecmathusingnamespacestd;intmain(){inti,j,n;int**p;cout\"enterthenyouwant:\";cinn;p=newint*[n];for(i=0;in;i)p=newint[n];for(j=0;jn;j)if(i==j||j==0)*(*(pi)j)=1;else*(*(pi)j)=*(*(pi-1)j)*(*(pi-1)j-1);cout\"杨辉三角\"endl;for(i=0;in;i){coutendl;for(j=0;jn;j){cout*(*(pi)j);if(i==j)break;}}delete[]p;delete[]p;return0;}结果出现异常处理怎么回事呢
回复

使用道具 举报

千问 | 2011-10-31 11:32:39 | 显示全部楼层
已经改好了,看下,主要问题已经在里面写了:#includeiostream#includecmathusingnamespacestd;intmain(){inti,j,n;int**p;cout\"enterthenyouwant:\";cinn;p=newint*[n];for(i=0;in;i)p=newint[n];for(i=0;in;i)for(j=0;jn;j){if(i==j)//你的程序错{*(*(pi)j)=1;//误主要在这几行,在第一次循环i=0,j=1时,break;//本该没有运算,但是你没有终止,仍然计算}if(j==0)//造成了后面else语句继续执行,也就造成了*(*(pi)j)=1;//存储计算上的问题else*(*(pi)j)=*(*(pi-1)j)*(*(pi-1)j-1);}cout\"杨辉三角\"endl;for(i=0;in;i){coutendl;for(j=0;jn;j){cout*(*(pi)j)\"\";if(i==j)break;}}coutendl;delete[]p;return0;}
回复

使用道具 举报

千问 | 2011-10-31 11:32:39 | 显示全部楼层
写杨辉三角时应该先给它的第一、二行和值为1的地方都赋值1,然后才从第三行才开始用算法计算对应的值,所以你这里*(*(pi)j)=*(*(pi-1)j)*(*(pi-1)j-1);当i和j都是为0的时候*(*(pi-1)j)就相当于是**(p-1)了,你的算法设计上有问题,给你个例子看看:#includestdio.hvoidmain(){inti,j;inta[10][10];printf(\"\\n\");for(i=0;i10;i){a[0]=1;a=1;}for(i=2;i10;i)for(j=1;ji;j)a[j]=a[i-1][j-1]a[i-1][j];for(i=0;i10;i){for(j=0;j=i;j)printf(\"]\",a[j]);printf(\"\\n\");}}赞同
回复

使用道具 举报

千问 | 2011-10-31 11:32:39 | 显示全部楼层
有数字的地方才分配空间,比如第一行是一个数字,分配一个就行了,分配多了,反而会出现没有初使化的错误。帮你改了一下:#includeiostream#includecmathusingnamespacestd;intmain(){inti,j,n;int**p;cout\"enterthenyouwant:\";cinn;p=newint*[n];for(i=0;in;i){p=newint[i1];for(j=0;j=i;j){if(i==j||j==0)*(*(pi)j)=1;else*(*(pi)j)=*(*(pi-1)j)*(*(pi-1)j-1);}}cout\"杨辉三角\"endl;for(i=0;in;i){coutendl;for(j=0;jn;j){cout*(*(pi)j);if(i==j)break;}}deletep;return0;}赞同
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行