升级版三角形(C++)
输入格式
输入一个数字(1
-9
)或者一个大写字母(A
-Z
)。
输出格式
按照题目描述,输出对应的三角形。
样例输入1
F
样例输出1
A
ABA
ABCBA
ABCDCBA
ABCDEDCBA
ABCDEFEDCBA
样例输入2
4
样例输出2
1
121
12321
1234321
这种题目涉及到ASCII 的使用。这里拓展一下几个常用的ASCII表中的对应
0-------48;9-------57;A------65; Z-----90;a------97;z-----------122;(每一个字符占两个)
下面是完整代码:
//升级版三角形
#include<iostream>
using namespace std;
int main(){
char c;
cin >>c;
//下面分两种情况,一种情况是字母的情况,另外一种情况是数字的情况
if(c>='A'&&c<='Z'){
for(int i=0;i<=c-'A';i++){
//画空格
for(int j =0;j<c-'A'-i;j++){
cout<<' ';
}
//画前半段的递增字母
for(int j = 0;j<i;j++){
cout<< (char)('A'+j);
}
//画后半段的递减字母
for(int j =i;j>=0;j-- ){
cout<<(char)('A'+j);
}
cout<<endl;
}
}
//下面这种情况输入是数字的情况
else{
for(int i=0;i<=c-'1';i++){
//画空格
for(int j =0;j<c-'1'-i;j++){
cout<<' ';
}
//画前半段的递增数字
for(int j = 0;j<i;j++){
cout<< (char)('1'+j);
}
//画后半段的递减数字
for(int j =i;j>=0;j-- ){
cout<<(char)('1'+j);
}
cout<<endl;
}
}
return 0;
}
整体思路:
利用两重for循环,先画出每一行给的空格;然后空格后面添上由A到输入字符的递增序列(利用ASCII相加减能求出个数,然后强制转换成字符就可以);然后在按照第二步化出递减序列(条件是j>0和j--);
第一层的for循环在加一个换行即可。