题目-剥洋葱

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hcy2319964421/article/details/53106578

5-14 剥洋葱   (15分)

布告,布告! 应老师要求,我们要做一道打印图形的题目,这是程序员最基本的能力。 那废话不多说,我们来说要求的图形 AAAAA ABBBA ABCBA ABBBA AAAAA 就是外到内,从A到Z。每一层都是一种字母,最里面的一层为一个,即最中心的一个。

输入格式:

一行,一个整数,即图形的层数

输出格式:

如上述图形

输入样例:

3

输出样例:

AAAAA
ABBBA
ABCBA
ABBBA
AAAAA

思路:

先画一个n=7的图像:


如图图像所示(默认的i代表行,j代表列):看图像可以发现,第i行与第7-i-1是等价的;第j列与第7-j-1l列是等价的额,所以处理图像的时候可以只处理如下的图像:


再观察该图像可以发现:所有的A均有一个特点,坐标中含有0;所有的B均有一个特点,坐标中含有1;所有的C中均含有一个特点,坐标中均含有2;D的坐标中均含有3;再利用这个特点控制输出的内容。

源代码:

#include<stdio.h>
int compare(int x,int y){
	if(x>y){
		return y;
	} 
	else{
		return x;
	}
}
int main(){
	char ch[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
	int number,control,n,temp,yemp;
	scanf("%d",&number);
	control=number*2-1;
	//i表示行,j标示列 
	 	for(int i=0;i<control;i++){
	 	temp=i;
		if(temp>control/2){
			
			temp=control-temp-1;
		}
		for(int j=0;j<control;j++){
			yemp=j;
			if(yemp>control/2){
				yemp=control-yemp-1;
			}
			/*
			如下的代码是最关键的地方,它将输出的内容与字符结合在了一起;
			输入的number其实是输出字母的种类数
			所以有这样的一个规律:一个坐标所具有的特征数就是输出字符在ch数组中所对应的字符数,至于这个特征数,该数就是坐标中比较小的那个数 
			*/
			for(int n=0;n<number;n++){
				if(temp==n||j==n){
					n=compare(temp,yemp);
					printf("%c",ch[n]);
					break;	
				}
			}
			if(j==control-1){
				printf("\n");
			}
		}
	}
} 


没有更多推荐了,返回首页

私密
私密原因:
请选择设置私密原因
  • 广告
  • 抄袭
  • 版权
  • 政治
  • 色情
  • 无意义
  • 其他
其他原因:
120
出错啦
系统繁忙,请稍后再试