54 菱形输出
作者: 孙辞海 时间限制: 1S章节: 函数
问题描述 :
明明这次又碰到问题了:
给定一个正整数N,明明的爸爸让他输出一个以Z开始的菱形,以后依次为Y,X…,
比如当N等于1的时候输出图形:
Z
当N等于2的时候,输出图形:(Y前没有空格,Z、X和W前一个空格)
Z
Y X
W
当N等于3的时候,输出图形:
Z
Y X
W V
U T
S
明明发现当N很大的时候就不是很容易了,所以找到了你,希望你编写一个程序帮助他
明明的问题可以归结为:输入一个正整数N,输出一个以Z开始的菱形,以后依次为Y,X…。 输入说明 :
你写的程序要求从标准输入设备中读入测试数据作为你所写程序的输入数据。标准输入设备中有多组测试数据,每组测试数据仅占一行,每行仅包括一个正整数n(1≤n≤7)。每组测试数据与其后一组测试数据之间没有任何空行,第一组测试数据前面以及最后一组测试数据后面也都没有任何空行。
输出说明 :对于每一组测试数据,你写的程序要求计算出一组相应的运算结果,并将这一组运算结果作为你所写程序的输出数据依次写入到标准输出设备中。每组输出一个以Z开始的菱形,具体格式参照样例输出。每组运算结果与其后一组运算结果之间有一个空行,最后一组运算结果之后没有空行。
注:通常,显示屏为标准输出设备。 输入范例 :
1
3
输出范例 :
Z
Z
Y X
W V
U T
S
代码:
/*
T54 菱形输出
输出共有2*n-1行
前n行:第i行左边空格:n-i
第i行内部空格:2(i-1)-1(i从2开始算)
后n-1行:第i行左边空格:i-n
第i行内部空格:2*(2*n-1-i)-1
每行输出顺序:空格、字母、空格、字母
其中第一行和最后一行特殊处理
*/
#include<stdio.h>
#include<string.h>
int main() {
int n = 0;
int i = 1, j = 0;
int count = 0;
int testCount = 0;
char characters[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
strrev(characters);
while (scanf("%d", &n) != EOF) {
count = 0;
testCount++;
if (testCount >= 2)
printf("\n");
// 输出第一行
for (i = 1; i <= n - 1; i++) {
printf(" ");
}
printf("%c\n", characters[count++]);
// 输出第2~2*n-2行
for (i = 2; i <= 2 * n - 2; i++) {
if (i <= n) {
for (j = 1; j <= n - i; j++)// 空格
printf(" ");
printf("%c", characters[count++]);// 字母
for (j = 1; j <= (2 * (i - 1)) - 1; j++)// 空格
printf(" ");
printf("%c\n", characters[count++]);// 字母
}
else {
for (j = 1; j <= i - n; j++)// 空格
printf(" ");
printf("%c", characters[count++]);// 字母
for (j = 1; j <= (2 * (2 * n - i - 1)) - 1; j++)// 空格
printf(" ");
printf("%c\n", characters[count++]);// 字母
}
}
if (n != 1) {
// 输出最后一行
for (i = 1; i <= n - 1; i++) {
printf(" ");
}
printf("%c\n", characters[count++]);
}
}
return 0;
}