蓝桥杯 基础练习之字母图形

字母图形

资源限制

时间限制:1.0 s 内存限制:256.0 MB

问题描述

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

ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。

输入格式

输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。

输出格式

输出n行,每个m个字符,为你的图形。

样例输入

5 7

样例输出

ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC

数据规模与约定

1 <= n, m <= 26。

思路

首先由题目可以分析出以下规律

  • 每一行的首字符都是第i个字符
  • 可以分为两部分
    • 第一部分是倒着的,从第i个字符开始倒着到第0个,共i-0+1个,最多m个
    • 第二部分是正着的,从第1个字符开始(否则第0个字符会重复),这部分共m-i-1个,最多m个

代码-C++

#include <iostream>
using namespace std;

int main(){
	int n,m;
	cin>>n>>m;
	string str1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
	
	for (int i=0;i<n;i++){
		string res = "";
        //第一部分
		for (int j=i;j>i-m;j--){
			if (j<0) break;
			res+=str1[j];
		} 
		////第二部分
		for (int k=1;k<m-i;k++){
			res+=str1[k];
		}
		cout<<res<<endl;
		//在两个循环内也可以直接cout,可以不用res
	}
	return 0;
}

总结

在实际操作过程中,第一遍并没有ac掉,后来我结合数据检查了一下,主要是第一部分中的长度超过了m的限制(当时的错误是j=i;j>0),导致并没有正确,70分,后来直接sub.str(0,2)也是可以直接弥补这部分的错误。不过还是重新理了一下错误原因,并在我的思路的第一部分重新写进去,限制长度为m,同时break是为了防止C++切片操作如:str[负数] 得到的是“ ”,所以break限制。

我后来在其他作者的博客上,找到一个巧妙的规律,其博客地址如下,讲的挺细的可以看一下:
https://blog.csdn.net/richenyunqi/article/details/84261936

发布了8 篇原创文章 · 获赞 1 · 访问量 77

猜你喜欢

转载自blog.csdn.net/Lurker_hunter/article/details/104562702