NUC1014 排版题.输出排列成菱形的字母

排版题.输出排列成菱形的字母

时间限制: 1000ms 内存限制: 65536K

问题描述
输入N值,编程输出如下图形
输入描述
一个整数N(1 ≤ N ≤ 7 )。
输出描述
排列成菱形的大写字符,首字符为Z,以后依次为Y,X...
样例输入
3
样例输出
    Z
  Y   X
W       V
  U   T
    S
来源
{NOJ}


问题分析:

这个题是拿《CCF NOI1032 菱形》改写的,没想到不是一次AC的,居然出现PE(格式错误)。坑人的地方是字母之间还有一个空格,肉眼还没看出来!

这里问题的关键是,首先控制好行,输出多少行要控制好;其次是控制好每一行,一行中通常由空格、字符、空格、字符和换行符号构成。

一行中,空格、字符、空格和字符的数量与它是第几行构成函数关系。这种函数关系在程序中,通常是用表达式来写的。

另外,用函数封装功能是一种好的做法。

程序说明:

参见链接博文。


参考链接:CCF NOI1032 菱形


AC的C++程序如下:

#include <iostream>

using namespace std;

void diamond(int n)
{
    char c = 'Z';

    // 打印上半三角
    for(int i=1; i<=n; i++) {
        for(int j=1; j<=(n-i)*2; j++)
            printf(" ");
        if(i == 1)
            printf("%c", c--);
        else {
            printf("%c", c--);
            for(int j=1; j<=(2*i-3)*2+1; j++)
                printf(" ");
            printf("%c", c--);
        }
        printf("
");
    }

    // 打印下半三角
    for(int i=1; i<=n-1; i++) {
        for(int j=0; j<i*2; j++)
            printf(" ");
        if(i == n - 1)
            printf("%c", c);
        else {
            printf("%c", c--);
            for(int j=1; j<(2*n-2*i-2)*2; j++)
                printf(" ");
            printf("%c", c--);
        }
        printf("
");
    }
}

int main()
{
    int n;

    cin >> n;

    diamond(n);

    return 0;
}




原文地址:https://www.cnblogs.com/tigerisland/p/7563861.html