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

求解这道题,不知道怎么填充

洌改 发布于 2017-10-10 16:07, 2145 次点击
当前编程题:实验三 循环---输出n层金字塔图形

5.   
【问题描述】

输入金字塔的层数n(n为正整数),输出由字符*组成的金字塔图形。最底层的字符数为2n-1,最上层字符数为1。字符图形水平居中对齐(使用空格填充)。

【样例输入】

5

【样例输出】

    *
   ***
  *****
 *******
*********
5 回复
#2
rjsp2017-10-11 08:47
“不知道怎么填充” ------ 什么意思?为什么不贴出你的代码,或明白地描述你遇到的问题?

程序代码:
#include <iostream>
#include <iomanip>
using namespace std;

int main( void )
{
    size_t n;
    cin >> n;

    for( size_t i=0; i!=n; ++i )
        cout << setfill(' ') << setw(n-i) << '*' << setfill('*') << setw(i*2+1) << '\n';
}

#3
洌改2017-10-17 15:32
回复 2楼 rjsp
哈哈谢谢,就是空格填充那里有点问题,你列出的也可以看懂
#4
rjsp2017-10-18 11:07
以下是引用洌改在2017-10-17 15:32:50的发言:

就是空格填充那里有点问题

那就直接输出空格呗,比如
程序代码:
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;

int main( void )
{
    size_t n;
    cin >> n;

    std::ostream_iterator<char> itor(cout);
    for( size_t i=0; i!=n; ++i )
    {
        std::fill_n( itor, n-i-1, ' ' );
        std::fill_n( itor, 2*i+1, '*' );
        *itor = '\n';
    }
}

#5
李昊逸Lion2017-10-20 20:02
这个可能比较好理解
程序代码:
#include<cstdio>
int n;
int main() {
    scanf("%d",&n);
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=n-i; j++) printf(" ");
        for(int j=1; j<=2*i-1; j++) printf("*");
        printf("\n");
    }
    return 0;
}
#6
洌改2017-10-23 16:30
回复 5楼 李昊逸Lion
嗯,看的时候能看懂,就是自己写的时候会出问题,谢谢大佬。
我下来再好好看一下多重循环的书
1