zl程序教程

您现在的位置是:首页 >  其他

当前栏目

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 字母图形

2023-03-07 09:41:41 时间

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 字母图形


目录

第十四届蓝桥杯集训——练习解题阶段(无序阶段)-基础练习 字母图形

前言

基础练习 字母图形

C语言

C++语言

Java语言

Python语言

总结


前言

        最近的一些文章都可能会很碎,写到哪里是哪里,过一阵子会具体的整理一遍,这里其它的类型题先往后排一排,因为蓝桥最后考的也就是对题目逻辑的理解能力,也就是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是列数,行数挨个排序就行,首字母逐一向后排;列数控制着字符应该最大显示长度。

C语言

别看代码多,但是规律是很明显的。

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

C++语言

能简洁一些还是很不错的。

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

Java语言

这里可以看到对坐标的处理方法,建议通过绘图的方式来解决这个题目。

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语言

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='')

总结

这个题目也算是一个坐标题目,多做做坐标题目是非常有好处的,后面解题很多很多都是各种坐标的处理呢。