对《C++程序设计(第三版)》谭浩强 编著 的P151 第六题的更优算法:
- 原答案:
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
int i,j,a[11][11];
for (i=1;i<11;i++)
{
a[i][1]=a[i][i]=1;
}
for (i=3;i<11;i++)
for (j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for (i=1;i<11;i++)
{
for (j=1;j<=i;j++)
cout<<setw(6)<<a[i][j]<<" ";
cout <<endl;
}
cout <<endl;
return 0;
}
输出结果:
左侧数字1无法紧挨边框,不美观,且算法可以精简。
- 更优算法:
#include <iostream>
#include <iomanip>
using namespace std;
int main ()
{
int a[11][11];
int i,j;
a[1][1]=1;
cout <<a[1][1]<<endl;
for (i=2;i<=10;i++) //每一行
{
a[i][1]=a[i][i]=1;
for (j=2;j<=i-1;j++) //对每一行中的每一列
a[i][j]=a[i-1][j-1]+a[i-1][j];
cout <<a[i][1]<<" ";
for (j=2;j<=i;j++)
cout <<setw(4)<<a[i][j]<<" ";
cout <<endl;
}
cout <<endl;
return 0;
}
运行结果:
更加美观。