这道题OJ杂不能通过?
B5.菱形字母图
问题描述
输入一个整数n,输出如下用大写字母构成的有规律的图形。如n=3,有图形
但对有些整数n,是无法输出这样的图形的,如n=30。
输入
输入有若干行,每行有一个整数n,(|n|<65536)。 输入直到文件输入结束。
输出
对每一行的测试数据,先在一行上输出“Case #:”,其中“#”是测试数据的行编号(从1开始),再在同一行上输出n的具体值,格式如“n=3”。接着在下面的一行或若干行上输出结果图形。如无法按 要求输出菱形字母图,那么输出“No image!”;两组输出数据之间空一行。
输入样例
3
4
输出样例
Case 1: n=3
A
BBB
CCCCC
BBB
A
Case 2: n=4
A
BBB
CCCCC
DDDDDDD
CCCCC
BBB
A
原文链接:http://acmoj.shu.
代码:
程序代码:#include <stdio.h>
void draw(int n) {
char letter = 'A';
int space = n - 1, cols = 1, i;
while(space > 0) {
for(i = 0; i < space; i++)
putchar(' ');
for(i = 0; i < cols; i++)
putchar(letter);
printf("\n");
cols += 2;
space--;
letter++;
}
for(i = 0; i < cols; i++)
putchar(letter);
printf("\n");
letter--;
space++;
cols -= 2;
while(space < n) {
for(i = 0; i < space; i++)
putchar(' ');
for(i = 0; i < cols; i++)
putchar(letter);
printf("\n");
cols -= 2;
space++;
letter--;
}
}
int main(void) {
int n, i = 1;
while(scanf("%d", &n) != EOF) {
if(n > 0 && n < 27) {
printf("case %d:n=%d\n", i++, n);
draw(n);
printf("\n");
} else {
printf("No image!\n\n");
}
}
return 0;
}







