杨辉三角的数字 排列都完成的差不多了,但是我发现当行数大了的时候就输出的不整齐,有什么办法可以优化这个吗?
http://www.cnblogs.com/snake-hand/p/3188622.html
你看看这个,看看又帮助没有。。
可以具体弄个代码出来看看么
不对齐可以补空格。比如1位数,补空格之后就占两位,与2位数就对齐了。
这个不是,比如11和1111,明显占的宽度不一样,所以会变的有些难看的
#include
using namespace std;
int main()
{
int n;
cin>>n;
int m[n][n];
for(int i=0;i<n;i++)
{
for(int k=0;k<=i;k++)
{
if(k==0||k==i)
m[i][k]=1;
else
m[i][k]=m[i-1][k-1]+m[i-1][k];
}
}
int a=1;
for(int i=0;i<n;i++)
{
for(int x=1;x<=n-a;x++)
cout<<" ";
for(int k=0;k<=i;k++)
cout<<m[i][k]<<" ";
for(int x=1;x<=n-a;x++)
cout<<" ";
a++;
cout<<endl;
}
return 0;
}
int main()
{
cout << "请输入*的总数:" << endl;
int n;
cin >> n;
if (n <= 0)
throw runtime_error("has a wrong number,please input a postive number!" + n);
float det = (-1 + sqrt(1 + 8*n))/2;
det = floor(det);//向下取整
int f_last =( 2 * n - det*det - det)/2;//计算最后一行的数目
//倒三角输出
//第一行单独输出,因为不能确定是否是完整的
for (int i = 0; i < f_last; i++)
printf("%c\40", '*');
printf("\n");
//前det-1行都按照行号输出
for (int i =2; i <= det + 1; i++)
{
for (int j =1; j < i; j++)
printf("\40");
for (int j = 0; j <=1+det - i; j++)
printf("%c\40", '*');
printf("\n");
}
cout << "输出完毕!" << endl;
return 0;
}
printf("%*d", 6, 10000);
//这样会占6个空格,是右对齐的,加个负号就对齐