您的位置:首页 > 其它

NUC1014 排版题.输出排列成菱形的字母【打印图案】

2017-04-30 19:31 573 查看
排版题.输出排列成菱形的字母
时间限制: 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("\n");
}

// 打印下半三角
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("\n");
}
}

int main()
{
int n;

cin >> n;

diamond(n);

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐