题目描述:
输入行数N,打印图形.
输入
输入只有一行,包括1个整数。(N<=15)
输出
输出有N行.
样例输入
3
样例输出
A
BAB
CBABC
本题上眼一瞧,是不是觉得挺简单的,根据输入的n值,编写for循环,从1循环到n,逐行输出字母加换行,然后发现,每一行输出的字母都是以A为中心,向左右递增,忽然不知道该怎么实现了。
这时,我们要想一想,哪节课学习过和字母相关的内容... ASCII码?
这一节课,我们知道了键盘上的每一个按键都对应一个ASCII码值,然后我们学习char字符型数据,都是可以直接转换成int型数字。然后,是不是就有点思路了,以A为中心,根据循环结构中,用于计数的 i 变量值的递增,转换成相应的字母,再分别向两边打印输出。 参考代码:
#include<bits/stdc++.h>
int n;char m='A';//用于转换字母 ;
int main(){
scanf("%d",&n);
for(int i=1;i<=n;++i){
m='A';//每打印一次,下次继续从A开始
for(int k=n-i;k>0;k--)
printf(" ");
if(i==1){
printf("%c\n",m);
}else{
m+=i;
//向左边打印 left
for(int L=i;L>0;L--)
printf("%c",--m);
//向右边打印 right
for(int R=i;R>1;R--)
printf("%c",++m);
printf("\n");
}
}
return 0;
}
另一种做法:
#include<bits/stdc++.h>
using namespace std;
int main(){
int i,j,n;
cin>>n;
char c;
for(i=1;i<=n;i++){
for(j=1;j<=n-i;j++)
cout<<" ";
for(j=i;j>=2;j--){
c=j+64; //64为 '@' 的ASCII码值 'A' 的值是65
cout<<c;
}
for(j=1;j<=i;j++){
c=j+64;
cout<<c;
}
cout<<endl;
}
}