排版题.输出排列成菱形的字母
Problem
输入N值,编程输出如下图形。
Input
一个整数N(1<=N<=7)。
Output
排列成菱形的大写字符,首字符为Z,以后依次为Y,X...
Sample Input
3
Sample Output
Z
Y X
W V
U T
S
=============================================
分析:
我初步的思路:因为要输出的菱形是上下对称的,因此只需要考虑图形的上半部分,并且将上半部分中特殊的第一行和中间的一行单独考虑,其他行一起考虑。
代码如下:
//////////////////////
////1001.cpp
/////////////////////
#include <stdio.h>
char c='Z';
int n;
void printLineOne(int t)
{
int i;
for(i=1;i<=(t-1)*2;i++)
printf(" ");
printf("%c\n",c);
c=c-1;
}
void printMiddleLine(int t)
{
int i;
printf("%c",c);
c=c-1;
for(i=1;i<=t*4-5;i++)
printf(" ");
printf("%c\n",c);
c=c-1;
}
void printOtherLine(int t)
{
int i;
for(i=1;i<=(n-t)*2;i++)
printf(" ");
printf("%c",c);
c=c-1;
for(i=1;i<=t*4-5;i++)
printf(" ");
printf("%c\n",c);
c=c-1;
}
int main()
{
int i;
scanf("%d",&n);
if(n==1)
{
printf("Z\n");
}
else
{
printLineOne(n);
for(i=2;i<=n-1;i++)
{
printOtherLine(i);
}
printMiddleLine(n);
for(i=n-1;i>1;i--)
{
printOtherLine(i);
}
printLineOne(n);
}
return 0;
}
再仔细分析各行的特点之后,发现其实不用把第一行和中间行独立出来,而是可以综合各行一起考虑的。
代码如下:
//////////////////////
////1001.cpp
/////////////////////
#include <stdio.h>
char ch='Z';
int n;
void printLine(int t)
{
int i;
for(i=1;i<=(n-t)*2;i++)
{
printf(" ");
}
printf("%c",ch);
ch=ch-1;
if(t==1)
{
printf("\n");
return;
}
else
{
for(i=1;i<=t*4-5;i++)
{
printf(" ");
}
printf("%c\n",ch);
ch=ch-1;
}
}
int main()
{
scanf("%d",&n);
int i;
if(n==1)
{
printf("Z\n");
}
else
{
for(i=1;i<=n;i++)
{
printLine(i);
}
for(i=n-1;i>=1;i--)
{
printLine(i);
}
}
return 0;
}
心得:此题最烦的地方是输出的格式,一定要注意看清楚题目给的Sample的格式要求,另外就是对行与行之间异同点的分析。
本文转自Phinecos(洞庭散人)博客园博客,原文链接:http://www.cnblogs.com/phinecos/archive/2006/06/08/420553.html,如需转载请自行联系原作者