还是打印菱形
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
这个菱形大家熟悉吧。
* *** ***** *** *
现在要求的是打印这样的菱形:不要*号,要最外层是字母A,然后里一层是B,再里一层是C···这样呢?
A ABA ABCBA ABA A
-
输入
-
第一行是一个正整数N(N≤25),代表有N组测试数据。
每一组数据包括一个正整数M(1≤M≤25),表示菱形的半径(直径就是M*2+1)。
输出
- 对于每组数据,输出要求打印的菱形。 样例输入
-
1 2
样例输出
-
A ABA ABCBA ABA
A
-
一道非常水的题,但是当初集训的时候没有弄懂,到最后也没遇到过这么简单的题,所以就一直一知半解,直到最近学弟问我这道题又重新做了一下,以前的不懂好像早已迎刃而解。学的多了以前不会的也就懂了。
-
#include <stdio.h> int main() { int t,m; scanf("%d",&t); char flag= 'A'; while(t --) { scanf("%d",&m); int i,j,k; for(i=1; i<=m+1; i++)//上三角有m行所以循环m次 { flag = 'A'; for(j=1; j<=m+1-i; j++)//输出上三角旁边的空格 { printf(" "); } for(k=1; k<=i; k++)//输出后面紧跟的字母,先输出左三角 { printf("%c",flag); flag++;//字母递增 } for(k = i + 1; k <=2*i - 1; k ++)//输出右三角 { printf("%c",flag - 1-1);//首先这里第一次减一是由于右三角是到这输出的所以要递减,第二个减一是由于右三角是从第二行才输出字母的所以要减一 flag --;//字母递减 } printf("\n");//每完成一行都要换行 } for(i=m ; i>=0; i--)//下三角,将其倒着便利就和上面的上三角for一样 { flag = 'A'; for(j=m -i; j>=0; j--)//和上面的一样 { printf(" "); } for(k=i - 1; k>=0; k--)//一样 { printf("%c",flag); flag++; } for(k = 2 * i - 3; k >=i - 1; k --)//由于下三角只有m行所以i=i-1,2*i-1=2*(i-1)-1=2*i-3 { printf("%c",flag - 1-1);//同上 flag--; } printf("\n"); } } return 0; }
-
第一行是一个正整数N(N≤25),代表有N组测试数据。