关于“字母图形”的解决解题思路#蓝桥杯#c语言

利用字母可以组成一些美丽的图形,下面给出了一个例子:

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);
	}
	
 } 

欧克,以上就是本篇文章的所以内容了,文章制作不易,喜欢的同学帮忙点个小爱心,让小编能够有动力继续写下去,还有,小编也和同学们差不多大呦,最后,希望同学们能够看不懂的地方多看几遍,别失去耐心。好了,小编祝在座的各位新的一年龙腾虎跃,龙马吉祥!

  • 16
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值