TOJ_1001解题报告
排版题.输出排列成菱形的字母Problem输入N值,编程输出如下图形。 Input一个整数N(1<=N<=7)。 Output排列成菱形的大写字符,首字符为Z,以后依次为Y,X... Sample Input3
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; } |
作者:洞庭散人
出处:http://phinecos.cnblogs.com/
本博客遵从Creative Commons Attribution 3.0 License,若用于非商业目的,您可以自由转载,但请保留原作者信息和文章链接URL。
posted on 2006-06-08 13:02 Phinecos(洞庭散人) 阅读(799) 评论(0) 收藏 举报




}
}
浙公网安备 33010602011771号