排版题.输出排列成菱形的字母Problem输入N值,编程输出如下图形。 Input一个整数N(1<=N<=7)。 Output排列成菱形的大写字符,首字符为Z,以后依次为Y,X... Sample Input3 Sample OutputZ 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; } |
TOJ_1001解题报告
最新推荐文章于 2021-01-12 17:03:50 发布