当前位置: 代码迷 >> C++ >> 这个求杨辉三角的程序为何不对
  详细解决方案

这个求杨辉三角的程序为何不对

热度:6914   发布时间:2013-02-26 00:00:00.0
这个求杨辉三角的程序为什么不对
#include <iostream>
using namespace std;
int main()
{cout<<1<<endl;
int i=1;
void p(int );
for (;i<10;i++)
p(i);
return 0;
}
void p(int a)
{int b;
double  s[10]={0,0,0,0,0,0,0,0,0,0};
s[0]=1;
s[a]=1;
for(b=1;0<b<a;b++)
s[b]=s[b-1]/b*(1+a-b);
for(b=0;0<=b<a+1;b++)
cout<<s[b]<<' ';
cout<<endl;
}

得不到正确结果
c++ 求助 杨辉三角 新手 学习

------解决方案--------------------------------------------------------

static double s[10] = {0};

------解决方案--------------------------------------------------------
用你的程序,稍作改动,就对了。
问题所在:for 理解错了,应该再详细看一下教材中的解释。
我把 s 的数据类型改为 int,由于整数除法的余数问题,把
s[b]=s[b-1]/b*(1+a-b);
更改为
s[b] = s[b-1] * (1 + a - b) / b;
(先乘,避免除法的余数丢失)

#include <iostream>
using namespace std;

void p(int);

int main()
{
cout << 1 << endl;
for (int i = 1; i < 10; i++)
{
p(i);
}
return 0;
}
void p(int a)
{
int* s = new int[a + 1];
s[0] = s[a] = 1;
for (int b = 1; b < a; b++)
{
s[b] = s[b-1] * (1 + a - b) / b;
}
for (int b = 0; b < a + 1; b++)
{
cout << s[b] << ' ';
}
cout << endl;
delete[] s;
}

------解决方案--------------------------------------------------------
还有,看来楼主是刚刚学C++
建议书写代码的时候,注意一下留白
比如
for(int i=0;i<10;i++)    
不是很好。

很多教材上会建议这样留白:
for (int i = 0; i < 10; i++)