【问题描述】
根据输入的整数n,输出对称的菱形字母塔。该字母塔有2*n-1行,每一行有若干个空格字符和大写英文字母组成。
【输入形式】
输入一个自然数n(1<=n<=26)
【输出形式】
输出由2*n-1行大写英文字母和空格组成的字母塔,其规律请见样例输出。其中的第n行最左面没有空格,每一行的右侧也没有空格。
【样例输入】
4
【样例输出】
【题目分析】
本题适合初学者对字符和循环嵌套的练习。
1.定义变量及输入。
int n,i,k,j;
char ch='A';//字符调用使用单引号
cin>>n;
2.进行前半部分,即列数增加的输出。
for(i=1;i<=n;i++) //使用i来换行
{ k=0;
while(n-i>k)
{cout<<" ";
k++;
} //输出每一行前面的空格
for(j=0;j<i;j++)
cout<<(char)(ch+j);//输出字符从A开始增加的
while(j!=1)
{
cout<<(char)(ch+j-2);
j--;
}//输出从最大的逐个减小的字符,直到取到A停止
cout<<endl;//每一行结束要换行
}
3.后半部分,即列数减小的行。
for(i-=2;i!=0;i--)//上个循环最后i的值为最长行的行数+1,因此先将i-2作为初始的行
{k=0;
while(n-i>k)//输出每一行前面的空格
{cout<<" ";
k++;
}
for(j=0;j<i;j++)//输出递增字符
cout<<(char)(ch+j);
while(j!=1)//输出递减字符
{
cout<<(char)(ch+j-2);
j--;
}
cout<<endl;//每一行最后记得要换行!!!
}
【完整代码】
#include <iostream>
using namespace std;
int main()
{ int n,i,k,j;
char ch='A';
cin>>n;
for(i=1;i<=n;i++)
{ k=0;
while(n-i>k)
{cout<<" ";
k++;
}
for(j=0;j<i;j++)
cout<<(char)(ch+j);
while(j!=1)
{
cout<<(char)(ch+j-2);
j--;
}
cout<<endl;
}
for(i-=2;i!=0;i--)
{k=0;
while(n-i>k)
{cout<<" ";
k++;
}
for(j=0;j<i;j++)
cout<<(char)(ch+j);
while(j!=1)
{
cout<<(char)(ch+j-2);
j--;
}
cout<<endl;
}
return 0;
}