注册 登录
编程论坛 C++教室

求高人指点,怎么输出一个对齐的金字塔形。

downeychou 发布于 2013-11-17 13:00, 593 次点击
#include
#include
using namespace std;
int main()
{
    int a[11][21],i,j;
    for(j=0;j<21;j++)
     for(i=j;i<11;i++)
     {a[i][j]=(j+1)*2-1;}
for(i=0;i<11;i++)
 {    cout<<SETW(32-3*I)<<A[I][0]<<"  ";
    for(j=1;j<(i+1)*2-1;j++)
    {if(j>i)a[i][j]=a[i][2*i-j];
     cout<<A[I][J]<<"  ";
    }
    cout<<ENDL;
 }
return 0;
}

  这个程序运行后得到的金字塔后面不是对齐的,怎么修改一下就可以变成对齐的
如                                1
                              1   3   1
                          1   3   5   3   1
                      1   3   5   7   5   3   1
                  1   3   5   7   9   7   5   3   1
                 …    …     …    …     …    …    …   
           1   3      …     …     21    …    …    …    3  1
还有个问题,怎么让数字中间对齐?
谢谢
2 回复
#2
p832lun2013-11-17 16:32
既然使用了setw()来控制输出字符,就不要用空格来进行缩进了(到底有几个空格很难数)。
下面是修改的代码
程序代码:
#include <iostream>

 #include <iomanip>



 using namespace std;

 int main()

 {
     int a[11][21],i,j;
     cout<<right;  
//输出格式右对齐,左对齐的话就不是金字塔而是下三角了
     for(j=0;j<21;j++)
      for(i=j;i<11;i++){
            a[i][j]=(j+1)*2-1;}

 for(i=0;i<11;i++)
     {  
     cout<<setw(33-3*i)<<a[i][0];//这里我用的33,
         for(j=1;j<(i+1)*2-1;j++)
             {
                if(j>i)a[i][j]=a[i][2*i-j];
                  cout<<setw(3)<<a[i][j];//这里也改过,也改成控制输出格式,不用空格;
                }
         cout<<endl;
       }

 return 0;

 }

截图,
只有本站会员才能查看附件,请 登录
#3
downeychou2013-11-17 17:34
回复 2楼 p832lun
好的  谢谢啦
1