题目-剥洋葱

来源:互联网 发布:淘宝物流单号查询 编辑:程序博客网 时间:2024/04/29 02:14

5-14 剥洋葱   (15分)

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

输入格式:

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

输出格式:

如上述图形

输入样例:

3

输出样例:

AAAAAABBBAABCBAABBBAAAAAA

思路:

先画一个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");}}}} 


0 0
原创粉丝点击