蓝桥杯赛题

蓝桥杯 字母图形题

题目概述:利用字母可以组成一些美丽的图形,下面给出了一个例子:
ABCDEFG
BABCDEF
CBABCDE
DCBABCD
EDCBABC
这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。
输入格式: 输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。
解答:
import java.util.Scanner;
public class test3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // 输入的两个数之间用空格隔开
        int n = sc.nextInt(); //接收行数
        int m = sc.nextInt(); //接收列数
        /* 把26个大写字母存在一个数组里面,实际上存的是字母对应的数字 */
        int[] a = new int[26];
        char s = 'A';
        for(int i=0;i<26;i++){
            a[i] = s+i;
        }
        for (int i=0;i<n;i++) {
         /* 这种写法忽略了行数大于列数的情况,因为题干内容是行数大于列数,容易导致我们的思维定式 */
            for (int k=i;k>0;k--){
                System.out.print((char)a[k]);
            }
            for (int j=0;j<m-i;j++) {
                System.out.print((char)a[j]);
            }
            System.out.println('\n');
        }
    }
}
写完上面的代码后,感觉没毛病,我就在蓝桥杯的练习系统提交了,结果:0分

在这里插入图片描述

重新思考其中的逻辑,发现自己忽略了当行数大于列数的情况,如果行数为4,列数为2,上述代码运行出来之后的结果是这样的:

在这里插入图片描述

很明显结果是错误的。
修改之后的代码:
import java.util.Scanner;
public class test3 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in); // 输入的两个数之间用空格隔开
        int n = sc.nextInt(); //接收行数
        int m = sc.nextInt(); //接收列数
        /* 把26个大写字母存在一个数组里面,实际上存的是字母对应的数字 */
        int[] a = new int[26];
        char s = 'A';
        for(int i=0;i<26;i++){
            a[i] = s+i;
        }
        for (int i=0;i<n;i++) {
        	// 修改的地方
            for (int k=i;k>0&&k<m;k--){
                System.out.print((char)a[k]);
            }
            for (int j=0;j<m-i;j++) {
                System.out.print((char)a[j]);
            }
            System.out.println('\n');
        }
    }
}

结果:20分

在这里插入图片描述

但是我这次实在找不到自己的程序错在哪里了,无奈就去网上找别人的代码,放在蓝桥杯测评系统上面运行,100分!!!!
下面是我从网上找到的运行之后100分的代码:
import java.util.Scanner;

public class test1 {

    public static void main(String[] args) {
        Scanner sc=  new Scanner(System.in);
        int n = sc.nextInt();//接收行数
        int m = sc.nextInt();//接收列数
        //将A-Z放入a[]中
        int[] a = new int[26];
        char s = 'A';
        for(int i=0;i<26;i++) {
            a[i] = s+i;
        }
        //循环
        for(int i=0;i<n;i++) {
            for(int j=i;j>=i-m+1&&j>-1;j--) {
                System.out.print((char)a[j]);
            }
            for(int k=1;k<=m-i-1;k++) {
                System.out.print((char)a[k]);
            }
            System.out.println();
        }

    }
}
我仔细对比了这两种写法,发现思路有一点点不一样。
以打印出CBABCDE这一行为例:
我的做法是先打印出CB,再打印出后面的ABCDE
网友的做法是先打印出CBA,再打印出后面的BCDE。
但我还是不知道自己的代码问题出在哪,如果有细心的网友发现了其中的不妥,望告知,十分感谢!!!
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 第12届蓝桥杯eda赛题是一个电子设计自动化的竞赛题目。该竞赛要求参赛选手使用EDA(Electronic Design Automation)工具对给定的电路进行分析、设计和优化。 该赛题一般会提供一个电路图,选手需要使用EDA工具进行仿真、布线和逻辑综合等操作,以评估电路的性能并进行优化。在此过程中,选手需注意电路的信号传输、功耗和面积等关键指标,力求通过合适的阻抗匹配、电源布局和时序优化等手段来提高电路的性能和有效性。 此外,该赛题还要求选手利用EDA工具完成RTL级设计和前端设计流程,其中包括高层综合、逻辑综合和门级综合等环节,最终生成能通过验证的可综合、布局和时序约束的RTL代码。 参加这个竞赛需要选手掌握EDA工具的使用方法,并具备电路设计和优化的基础知识。选手应该熟悉基本的逻辑门、时序分析和布线规则,以便针对电路实现高性能和低功耗的优化。 蓝桥杯eda赛题是一个综合了理论与实践的竞赛项目,能够帮助选手提升电路设计和优化的技能,并增加对EDA工具的熟练度。参加这个竞赛将为选手个人的学习和职业发展提供宝贵的经验和机会。 ### 回答2: 第12届蓝桥杯EDA赛题是一个电子设计自动化(EDA)的比赛题目。在这个赛题中,参赛者需要利用EDA工具完成特定的电路设计与优化任务。 在赛题中,参赛者需要完成以下几个步骤: 1. 阅读赛题要求和限制条件:参赛者需要仔细阅读比赛的说明和条件,了解需要完成的电路设计的具体要求和限制条件。 2. 进行电路设计:根据赛题的要求,参赛者需要使用EDA工具进行电路设计。这包括选择适当的电子元件和器件、进行电路连接、进行信号调整等。 3. 优化电路设计:在完成电路设计后,参赛者还需要进行电路的优化。这包括减少电路的功耗、提高电路的速度、优化电路的布局等。参赛者可以通过调整电路参数、改变器件布局等方法来进行优化。 4. 进行仿真与验证:在完成电路设计和优化后,参赛者需要利用EDA工具对设计进行仿真与验证。这包括验证电路的功能是否符合要求,通过仿真测试电路的性能等。 5. 提交结果与评估:在完成电路设计、优化和仿真验证后,参赛者需要按照赛题要求提交设计文件和仿真结果。评委会将根据参赛者的设计效果、仿真结果等评估设计的优劣。 通过参加蓝桥杯EDA赛题,选手们可以了解到电子设计自动化领域的最新技术和工具,并且锻炼自己的电路设计与优化能力。同时,这也是一个展示选手创造力和技术实力的舞台,参赛者可以在比赛中展示自己的电路设计与优化成果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值