利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
规律分析
其实当小编看到这个题的时候也是看了好半天,最初小编以为这个题目是字母依次右移一个单位,后来写完了才发现根本不是这么一回事,小编直接哭死,好了好了,牢骚发完开始正式解答
先看图形,我们不难发现:1.所谓的优美图形其实全都是是由26个英文字母构成的
2.开头字母A会随着行数的增加推动后面的字母往后挪,且每挪动一次最后面的字母会被“挤掉”
3.字母A之前的空位会由A后面的字母代替,依次增加,补充开头的空位,这么说 可能有点抽象,如下图
代码分析
欧克,规律就是如上图所示,那么应该如何实现呢,首先我们要做的就是生成大写的英文字母,其次,就是一行生成多少个,这里你会想到什么办法呢?哈哈,不急,咱们继续分析,如果我们把第一行设为0行的话,那么字母’A‘会在第一行开始之后每次往右挤一个位置,而下一行’A’字母及以后的位置都会比上一行’A‘后买的位置小一个字母,说到这儿,你有灵感了没,没有也没关系,小编做这个题也花了好久,咱们继续,那么,替补A的位置我们又该如何实现呢,我们继续看,从’B‘替补后,新出现的字母都是在’B’的基础上生成的,每次新替补的字母都比前一个字母大一个,ok,全部分析完毕,接下来就是代码生成
#include<stdio.h>
int main()
{
int m,n;//m代表每行多少个字符,n代表有多少行
char s[27];
int i,j,t;
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
s[i]='A'+i;//生成26个英文字母
}
s[m]='\0';
for(i=0;i<n;i++)//控制生成的行数,把第一行看成0行,第一列看成第0列
{
if(i>0)//'B'生成在第2行及以后的位置
{
s[i-1]='B';//'B'生成的位置比行数少一个,每次行数增加,'B'的位置也会更新
for(t=i-1;t>0;t--)//上文分析过,新的替补总是比上一个替补多一个,但是位置却是由大变小
s[t-1]=s[t]+1;//要保证数组大于等于0,所以t-1要大于等于0,所以t要大于0
}//下面是对“我们把第一行设为0行的话
//那么字母'A‘会在第一行开始之后每次往右挤一个位置
//而下一行'A'字母及以后的位置都会比上一行’A‘后买的位置小一个字母”的代码生成
for(j=i;j<m&&j>0;j++)//它与i是同步的,但是它在第0行的时候没有变化,所以我们要让j大于0,同时我们也要保证他的长度要小于m的长度
s[j]=s[j]-1;
s[m]='\0';//最后别忘了加空字符
puts(s);
}
}
欧克,以上就是本篇文章的所以内容了,文章制作不易,喜欢的同学帮忙点个小爱心,让小编能够有动力继续写下去,还有,小编也和同学们差不多大呦,最后,希望同学们能够看不懂的地方多看几遍,别失去耐心。好了,小编祝在座的各位新的一年龙腾虎跃,龙马吉祥!