#include "stdio.h"
#include <iostream>
#include <iomanip>
using namespace std;
void Triangle();
int GetNumWidth(int nNum);
void PrintSpace(int nWidth, int nCount);
int main(int argc, char* argv[])
{
Triangle();
return 0;
}
void Triangle()
{
char szBuf[64] = "";
int n = 0;
int i = 0;
int j = 0;
while(1)
{
cout<<"请输入行数(负数退出): ";
cin>>szBuf;
n = atoi(szBuf);
if( 0==n )
{
cout<<"输入有误!"<<endl<<endl;
continue;
}
else if( n<0 )
{
break;
}
//分配足够容纳的内存空间
int *TRI = new int[n*n];
for(i=0; i<n; i++)
{
for(j=0; j<=i; j++)
{
//列数值为0和行列数值相等时当前位置值为0
if(0==j || i==j)
{
*(TRI + i*n + j) = 1;
}
//其他情况当前位置值为上一行的前一列与上一行当前列之和
else
{
*(TRI + i*n + j) = *(TRI + (i-1)*n + (j-1)) + *(TRI + (i-1)*n + j);
}
}
}
//获取最大数的数字位数(最后一行中间的数)
int nWidth = GetNumWidth( *(TRI + (n-1) * n + n/2) );
for(i=0; i<n; i++)
{
//打印空格, 形成等腰三角形状
PrintSpace(nWidth, n-i-1);
for(j=0; j<=i; j++)
{
cout<<setiosflags(ios::left)<<setw(nWidth*2)<<*(TRI + i * n + j);
}
cout<<endl;
}
cout<<endl;
delete [] TRI;
}
}
int GetNumWidth(int nNum)
{
int nWidth = 1;
while(nNum > 9)
{
nNum = nNum / 10;
nWidth++;
}
return nWidth;
}
void PrintSpace(int nWidth, int nCount)
{
for(int i = 0; i < nCount; i++)
{
for(int j = 0; j < nWidth; j++)
{
putchar(' ');
}
}
}
杨辉三角C语言
最新推荐文章于 2024-06-27 12:37:56 发布