目录
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 字母图形
最近的一些文章都可能会很碎,写到哪里是哪里,过一阵子会具体的整理一遍,这里其它的类型题先往后排一排,因为蓝桥最后考的也就是对题目逻辑的理解能力,也就是dp分析能力了,所以就主要目标定在这里,最近的题目会很散,很多,基本上都是网罗全网的一些dp练习题进行二次训练,准备比赛的学生底子薄的先不建议看啊,当然,脑子快的例外,可以直接跳过之前的一切直接来看即可,只需要你在高中的时候数学成绩还可以那就没啥问题,其实,dp就是规律总结,我们只需要推导出对应题目的数学规律就可以直接操作,可能是一维数组,也可能是二维数组,总体来看二维数组的较多,但是如果能降为的话建议降为,因为如果降为起来你看看时间复杂度就知道咋回事了,那么在这里祝大家能无序的各种看明白,争取能帮助到大家。
资源限制
内存限制:256.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式
输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
输出格式
输出n行,每个m个字符,为你的图形。
样例输入
5 7
样例输出
ABCDEFG BABCDEF CBABCDE DCBABCD EDCBABC
数据规模与约定
1 <= n, m <= 26
题解:
这个题目的规律还是很容易找到的,就是根据输入的两个数,第一个数n是行数,第二个数m是列数,行数挨个排序就行,首字母逐一向后排;列数控制着字符应该最大显示长度。
别看代码多,但是规律是很明显的。
#include <stdio.h>
#include <stdlib.h>
#define MAXSIZE 26
//输出
void Print(char matrix[MAXSIZE][MAXSIZE],int n,int m)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("%c",matrix[i][j]);
}
printf("\n");
}
}
//实现字母图形
void Drawing(int n,int m)
{
int i,j;
int point=0;
char str;
char matrix[MAXSIZE][MAXSIZE];
for(i=0;i<n;i++)
{
str='A';
for(j=i;j<m;j++)
{
matrix[i][j]=str++;
}
str='A';
for(j=i-1;j>=0;j--)
{
matrix[i][j]=++str;
}
}
Print(matrix,n,m);
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
Drawing(n,m);
return 0;
}
能简洁一些还是很不错的。
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n, m;
cin >> n >> m;
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < m; ++j)
cout << char('A'+abs(i-j));
cout << endl;
}
return 0;
}
这里可以看到对坐标的处理方法,建议通过绘图的方式来解决这个题目。
import java.io.*;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
int m=sc.nextInt();
sc.close();
char[][] a = new char[n][m];
a[0][0] = 'A';
for (int i = 1; i < n; i++) a[i][0] = (char) (a[i - 1][0] + 1);
for (int i = 1; i < m; i++) a[0][i] = (char) (a[0][i - 1] + 1);
for (int i = 1; i < n; i++) for (int j = 1; j < m; j++) a[i][j] = a[i - 1][j - 1];
for (char[] i : a) {
for (char j : i) {
System.out.print(j);
}
System.out.println();
}
}
}
Python相对来说由于是弱类型的变量,在处理一些内容的时候是非常方便的,根本不需要考虑各种变量类型之间的变化问题。
m,n = map(int,input().split())
for i in range(1,m+1):
for j in range(1,n+1):
if j == n:
print(chr(abs(i-j)+65),end='\n')
else:
print(chr(abs(i-j)+65),end='')
这个题目也算是一个坐标题目,多做做坐标题目是非常有好处的,后面解题很多很多都是各种坐标的处理呢。