原题链接:STIPC-002_B.涛涛的金字塔
B.涛涛的金字塔
题目描述
请打印出一个字符金字塔,特征请参考样例。(大家喜欢这样简单的题面吗, x i x i xixi xixi~)
输入格式
输入一个大写字母
输出格式
输出一个字母金字塔
输入输出样例
样例一:
输入:
C C C
输出:
A A A
A B A ABA ABA
A B C B A ABCBA ABCBA
题目解析:
该类型的题目算是 C C C 语言学习的入门知识了,考察了循环嵌套的知识点以及 A S C I I ASCII ASCII 码值,且此类题型一般具有很强的规律性,比较容易观察。
由样例,从输入的字母可以得出输出的金字塔会有几层( A A A 为 1 1 1 , Z Z Z 为 26 26 26),这样的话每层的前置空格有多少就十分易于计算了。
且从上至下的每层金字塔都会出现一个比上一层 A S C I I ASCII ASCII 最大的还要大 1 1 1 的字母,即例如: A A A 第一层 A S C I I ASCII ASCII 最大的是 A A A,第二层新出现的字母是 B B B,刚好比第一层的 A A A 的 A S C I I ASCII ASCII 大 1 1 1。
同时可以看出,每一层都是以新出现的字母为轴,镜像输出。即例如:" A B C D C B A ABCDCBA ABCDCBA ", " A B C B A ABCBA ABCBA "。
此时,对于任意一层的字母的输出方式已经很清晰了。
假设输入字母为
α
α
α ,
则第1层前置空格有
α
−
1
α - 1
α−1 个,此后应输出"
A
A
A",换行。
则第2层前置空格有
α
−
2
α - 2
α−2 个,此后应输出"
A
B
A
ABA
ABA",换行。
…
第
′
α
′
−
′
A
′
+
1
'α' - 'A' + 1
′α′−′A′+1 层前置空格有
α
−
α
α - α
α−α 个,此后应输出
A
B
C
.
.
.
α
.
.
.
C
B
A
ABC...α...CBA
ABC...α...CBA ,换行。
以上。
AC代码(C++):
#include <bits/stdc++.h>
using namespace std;
int main()
{
char c;
scanf("%c",&c);
int n,i,j;
n=c-'A'+1;
for(i=0;i<n;i++)
{
for(j=0;j<n-1-i;j++)
{
printf(" ");
}
for(j=0;j<i+1;j++)
{
printf("%c",'A'+j);
}
for(j=i;j>0;j--)
{
printf("%c",'A'+j-1);
}
printf("\n");
}
return 0;
}