题目描述:

输入行数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;
    }
}