还是打印菱形
描述这个菱形大家熟悉吧。
*
***
*****
***
*
现在要求的是打印这样的菱形:不要*号,要最外层是字母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
ps:为什么这么难的题是难度为1的题。。。。主要是格式控制
代码示例:
#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;
}