如何居中对齐图案?

How to center align a pattern?

如何使箭头尾部与箭头居中对齐?

    **
   ****
  ******
 ********
**********
****
****
****
****

这是我的代码:

#include<iostream>
using namespace std;
int main() {
  int n;
  cout<<"enter size";
  cin>>n;

  int rows,columns;
  cout<<"enter numbers";
  cin>>rows>>columns;

  for(int k=1;k<=n;k++){
    for(int j=1;j<=n-k;j++){
      cout<<" ";
    }
    for(int j=1;j<=k;j++){
      cout<<"*";
    }
    for(int i=1;i<=k;i++){
      cout<<"*";
    }
    cout<<endl;
  }
  for(int i=1;i<=rows;i++){
    for(int j=1;j<=columns;j++){
      cout<<"*";
    }
    cout<<endl;
  } 
  return 0;
}

我尝试使用以下输入 运行 它:

enter size 5
enter numbers 4 4 

箭头看起来不错,但尾巴是左对齐的。我怎样才能让它进入中心?

假设您在终端上显示固定间距的字符,一般算法是:

  • 取要居中的元素的宽度 we
  • 取需要居中的区域的宽度WA
  • 在元素前打印 (WA-we)/2 个空格

考虑到在你的情况下 WA 将是 2*nwe 将是列,你可以在某处写:

 int s=(2*n-columns)/2;

并在算法的第二部分打印 s 个空格,然后开始打印圣诞树树干的 *

顺便说一句,我不知道你是否可以在作业中使用字符串,但如果是的话,你可以在之后替换打印 w 个字符 c 的循环另一个只打印 string(w, c),(例如 cout<<string(s, ' ');),这将使您的程序更加紧凑和可读。