【Java】2021 RoboCom 机器人开发者大赛-高职组(复赛)题解

7-8 人工智能打招呼

hello.JPG

号称具有人工智能的机器人,至少应该能分辨出新人和老朋友,所以打招呼的时候应该能有所区别。本题就请你为这个人工智能机器人实现这个功能:当它遇到陌生人的时候,会说:“Hello X, how are you?”其中 X 是这个人的称呼;而当它再次遇到这个人的时候,会说:“Hi X! Glad to see you again!”

输入格式:

输入首先在第一行中给出一个正整数 N(≤105),随后一行给出 N 个人的编号。即简单起见,我们把每个人的称呼 X 用一个 5 位整数来替代。

输出格式:

对于每个人的编号,按照题面要求在一行中输出人工智能机器人打招呼的内容。

输入样例:

7
00000 99999 00000 12345 00000 12345 00000

输出样例:

Hello 00000, how are you?
Hello 99999, how are you?
Hi 00000! Glad to see you again!
Hello 12345, how are you?
Hi 00000! Glad to see you again!
Hi 12345! Glad to see you again!
Hi 00000! Glad to see you again!

Solution:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(in.readLine());
        String[] input = in.readLine().split(" ");
        int[] book = new int[1000000];
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            int x = Integer.parseInt(input[i]);
            if (book[x] != 1) {
                sb.append("Hello ").append(input[i]).append(", how are you?");
                book[x] = 1;
            } else {
                sb.append("Hi ").append(input[i]).append("! Glad to see you again!");
            }
            if (i < n - 1) sb.append("\n");
        }
        System.out.println(sb);
    }
}

7-9 人工智能数字翻译

oksapmin.jpg

千万不要以为地球上的人类都用十进制数字。事实上,地球上不同国家、不同民族在用的数字系统多达十几套。例如新几内亚的 Oksapmin 人用的是 27 进制的数字系统,如上图所示,他们用身体的 27 个部位表示 27 个数字。例如他们管 1 叫“提普纳”,即一只手的大拇指;管 6 叫“都怕”,是指手腕;管 12 叫“纳塔”,指耳朵,等等。于是他们那里的 10 是十进制系统里的 27,20 是十进制里的 54 …… 当两个不同数字系统的人类碰到一起谈价钱,大家就很头痛了,于是搞了一个人工智能数字翻译,可以把数字从一个系统翻译到另一个系统。本题就请你来实现这个人工智能数字翻译功能。

输入格式:

输入在第一行中给出两个非负整数:A(≤108 —— 这里 108 是十进制数)和 D,其中 A 是 10 或 27 进制数,DA 的进制,或者是 10,或者是 27。如果 A 是 27 进制数,我们用 0 - 9 表示前 10 个数,用 A - Q 表示后面 17 个数。

输出格式:

在一行中将输入的数字翻译成另一个进制系统的数字。

输入样例 1:

6397636 10

输出样例 1:

C10OD

输入样例 2:

8E0A 27

输出样例 2:

167680

Solution:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] input = in.readLine().split(" ");
        int D = Integer.parseInt(input[1]);
        if (D == 10) {
            System.out.println(Integer.toString(Integer.parseInt(input[0]), 27).toUpperCase());
        } else {
            System.out.println(Integer.parseInt(input[0], 27));
        }
    }
}

7-10 机器人拼图

pz.png

给定一块由 n×m 个格子组成的矩形拼图板,本题要求你根据给定的机械手移动指令集,将拼图中的碎片逐一放到指定位置。

机械手每次抓取一块碎片,都会在拼图板的左上角位置等待指令。一个指令集是由 0-4 这五个数字组成的字符串,每个数字代表的意义如下:

  • 1:向右移动一格;
  • 2:向下移动一格;
  • 3:向左移动一格;
  • 4:向上移动一格;
  • 0:将碎片放置在当前位置,并结束这次任务。

如果指令要求机械手移动到拼图板边界外,机械手会无视这个指令。如果接收到指令 0 时,当前位置上已经有一块碎片放好了,机械手会扔掉手里的碎片,结束这次任务。

输入格式:

输入第一行给出 2 个正整数 nm(1≤n,m≤100),随后一共有 n×m 行,第 i 行给出编号为 ii=1,⋯nm)的碎片对应的指令集,每条指令集一定以唯一的 0 结尾。

输出格式:

输出 n 行,每行 m 个整数,为放置在对应位置上的碎片编号。如果该位置上没有碎片,则输出 0。一行中的数字间以 1 个空格分隔,行首位不得有多余空格。

输入样例:

2 3
1120
21140
34120
0
110
21111340

输出样例:

4 6 2
0 3 1

Solution:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] input = in.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int m = Integer.parseInt(input[1]);
        int row = n * m;
        int[][] map = new int[n + 1][m + 1];
        for (int i = 1; i <= row; i++) {
            char[] c = in.readLine().toCharArray();
            int x = 1, y = 1;
            for (int j = 0; j < c.length; j++) {
                int op = c[j] - '0';
                if (op == 1 && y != m) {
                    y++;
                } else if (op == 2 && x != n) {
                    x++;
                } else if (op == 3 && y != 1) {
                    y--;
                } else if (op == 4 && x != 1) {
                    x--;
                }
            }
            if (map[x][y] == 0) {
                map[x][y] = i;
            }
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 1; i < n + 1; i++) {
            for (int j = 1; j < m + 1; j++) {
                sb.append(map[i][j]);
                if (j < m) sb.append(" ");
            }
            if (i < n) sb.append("\n");
        }
        System.out.println(sb);
    }
}

7-11 PAT 基础级排名

PAT 的段位分为 9 个级别,其中基础级考试分为青铜、白银、黄金、白金、钻石这 5 个段位,满分分别为 30、50、60、80、100。

基础级考试由报考单位订制需要的最高级别,设为级别 L,根据考生获得的分数所在的分数段决定该生获得的证书级别和证书内容,规则为:

  • 若考生的分数超过段位 L1 的满分,且不高于段位 L2 的满分,并且 L1 和 L2 为相邻段位,则该生获得 L2 段位的证书;
  • 证书上包含两个成绩:S/FR/T,其中 S 是本人得分;F 是该段位满分;R 是本人在该段位证书获得者中的排名;T 是位于该段位及以下段位考生总人数。

给定一组考生的成绩,请你编写程序生成他们的证书。

输入格式:

输入首先在第一行给出 2 个正整数:一个是不超过 1000 的正整数 N,为考生总人数;另一个是单位订制的最高段位级别 L,在 [1, 5] 区间内,依次对应青铜、白银、黄金、白金、钻石这 5 个段位。

随后 N 行,每行给出一位考生的准考证号和成绩,其间以空格分隔。准考证号为长度不超过 10 的、由数字和英文字母组成的字符串;成绩为不超过段位 L 的满分的非负整数。

输出格式:

按照成绩从高到低的顺序输出每位考生的证书信息,格式为:

准考证号 段位 S/F R/T

成绩并列的考生拥有并列的排名,其后的考生名次按实际位次计算。例如有 5 位考生得到满分 100 时,他们都是第 1 名,而考 99 的考生就是第 6 名。成绩并列的考生按准考证号的字典序递增输出。题目保证准考证号没有重复。

注意:零分没有证书。对于零分的考生,只按字典序递增输出其准考证号。

输入样例:

10 4
CN001 58
CN012 49
CN233 0
CN003 0
CN025 31
CN999 80
CN666 80
CN777 60
CN007 79
CN250 15

输出样例:

CN666 4 80/80 1/10
CN999 4 80/80 1/10
CN007 4 79/80 3/10
CN777 3 60/60 1/7
CN001 3 58/60 2/7
CN012 2 49/50 1/5
CN025 2 31/50 2/5
CN250 1 15/30 1/3
CN003
CN233

Solution:

::: danger
测试点 1、4 答案错误
:::

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] input = in.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int l = Integer.parseInt(input[1]);
        List<Rank> list = new ArrayList<>();
        for (int i = 0; i < n; i++) {
            input = in.readLine().split(" ");
            int score = Integer.parseInt(input[1]);
            int L = 0;
            if (score <= 30) list.add(new Rank(input[0], 1, score, 30));
            else if (score <= 50) list.add(new Rank(input[0], 2, score, 50));
            else if (score <= 60) list.add(new Rank(input[0], 3, score, 60));
            else if (score <= 80) list.add(new Rank(input[0], 4, score, 80));
            else if (score <= 100) list.add(new Rank(input[0], 5, score, 100));
        }
        list.sort(null);
        int index = 1, cnt = 0, t = 0;
        Rank temp = list.get(0);
        StringBuilder sb = new StringBuilder();
        int size = list.size();
        for (int i = 0; i < size; i++) {
            Rank rank = list.get(i);
            if (rank.score == 0) {
                sb.append(rank.num);
            } else {
                sb.append(rank.num).append(" ").append(rank.L).append(" ").append(rank.score).append("/")
                        .append(rank.fullScore).append(" ");
                if (temp.score == rank.score && temp.L == rank.L) {
                    sb.append(index).append("/").append(n);
                    t++;
                } else if (temp.score != rank.score && temp.L == rank.L) {
                    index = t + 1;
                    sb.append(index).append("/").append(n);
                    t++;
                } else {
                    temp = list.get(i);
                    index = 1;
                    n -= t;
                    sb.append(index).append("/").append(n);
                    t = 1;
                }
            }
            cnt++;
            if (i < size - 1) sb.append("\n");
        }
        System.out.println(sb);
    }
}


class Rank implements Comparable<Rank> {
    String num;
    int L;
    int score;
    int fullScore;

    public Rank(String num, int l, int score, int fullScore) {
        this.num = num;
        L = l;
        this.score = score;
        this.fullScore = fullScore;
    }

    @Override
    public int compareTo(Rank o) {
        int r = o.score - this.score;
        if (r == 0) r = this.num.compareTo(o.num);
        return r;
    }
}

7-12 人工智能刑警

ai.png

人工智能技术在刑侦领域已经有了长足的发展,可以在拥挤的人群中识别出每个人的面部特征,与数据库中所有罪犯的面部特征进行匹配,自动识别出其中的罪犯。

本题就请你实现一个简单的自动识别程序,根据系统抽取出的若干面部特征判断其是否罪犯。

输入格式:

输入第一行给出两个正整数 N(≤2×104)和 M(≤10),分别为数据库中罪犯的数量和每个人脸提取的不同特征的数量。随后 N 行,每行给出 M 个整数,以空格分隔。第 i 行给出的是第 i 号罪犯的面部特征(1≤iN),格式为:

特征1 特征2 …… 特征M ID

其中每个特征是一个 [1,109] 区间内的整数;ID 是罪犯的编号,为不超过 20 位的正整数。注意不同位置的特征对应不同种类,例如特征1对应眼距、特征2对应唇宽等等。题目保证不存在任何两个罪犯具有完全相同的面部特征,所有 ID 也都是不同的。

再下面给出一系列捕捉到的人脸的面部特征。当特征10 时标志输入结束,这一行输入不要处理。此外,为了帮助你区分罪犯和普通人的数据,这两部分数据之间有一个空行。(因为是简单题,所以查询数据量比较小,不超过 2000。当然你可以考虑一下,如果查询数量巨大应该怎么处理……)

输出格式:

对每个捕捉到的人脸,如果与某个罪犯完全匹配,则在一行中输出罪犯编号(注意:如果有前导零也必须原样输出);如果没有匹配任何罪犯,则输出 Pass

输入样例:

9 4
15 23 23 7 0001
12 32 15 5 2001
10 15 23 3 3725
12 17 15 6 0238
15 10 23 11 99674
29 32 33 4 00253
9 31 987 13 1004
29 32 15 12 8791
15 23 25 7 7720

15 23 23 7
12 17 15 6
10 15 15 3
29 32 33 4
15 32 12 29
9 31 987 13
5 10 23 1
0 0 0 0

输出样例:

0001
0238
Pass
00253
Pass
1004
Pass

Solution:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
        String[] input = in.readLine().split(" ");
        int n = Integer.parseInt(input[0]);
        int m = Integer.parseInt(input[1]);
        Map<String, String> map = new HashMap<>();
        for (int i = 0; i < n; i++) {
            input = in.readLine().split(" ");
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < m; j++) {
                sb.append(input[j]);
                if (j < m - 1) sb.append(" ");
            }
            map.put(sb.toString(), input[m]);
        }
        in.readLine();
        input = in.readLine().split(" ");
        while (!input[0].equals("0")) {
            StringBuilder sb = new StringBuilder();
            for (int j = 0; j < m; j++) {
                sb.append(input[j]);
                if (j < m - 1) sb.append(" ");
            }
            System.out.println(map.getOrDefault(sb.toString(), "Pass"));
            input = in.readLine().split(" ");
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/74124.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Oracle 数据库 SQL 语句 】积累1

Oracle 数据库 SQL 语句 1、分组之后再合计2、显示不为空的值 1、分组之后再合计 关键字&#xff1a; grouping sets &#xff08;&#xff08;分组字段1&#xff0c;分组字段2&#xff09;&#xff0c;&#xff08;&#xff09;&#xff09; select sylbdm ,count(sylbmc) a…

动态规划之斐波拉契数列模型

斐波拉契数列模型 1. 第 N 个泰波那契数2. 三步问题&#xff08;easy&#xff09;3. 使⽤最⼩花费爬楼梯&#xff08;easy&#xff09;4. 解码⽅法&#xff08;medium&#xff09; 动态规划的介绍&#xff1a; 动态规划是一种在数学、管理科学、计算机科学、经济学和生物信息学…

Redis之缓存雪崩、缓存击穿、缓存穿透问题

文章目录 前言一、缓存雪崩1.1、原因分析2.2、常用解决方案 二、缓存击穿2.1、原因分析2.2、常用解决方案2.2.1、使用互斥锁2.2.2、逻辑过期方案2.3、方案对比 三、缓存穿透3.1、原因分析3.2、解决方案3.2.1、缓存空对象3.2.3、布隆过滤3.3、方案对比 总结 前言 本文谈谈Redis…

基于DBN的伪测量配电网状态估计,DBN的详细原理

目录 背影 DBN神经网络的原理 DBN神经网络的定义 受限玻尔兹曼机(RBM) DBN的伪测量配电网状态估计 基本结构 主要参数 数据 MATALB代码 结果图 展望 背影 DBN是一种深度学习神经网络,拥有提取特征,非监督学习的能力,是一种非常好的分类算法,本文将DBN算法伪测量配电网…

Photoshop多图片与多窗口下排列操作方法

首先&#xff0c;在Photoshop中打开6张图片&#xff0c;在“窗口”菜单下切换窗口排列状态&#xff1a; 在 “窗口”菜单下对窗口进行排列&#xff0c;分别呈现如下&#xff1a; &#xff08;一&#xff09;. 点击“窗口” -> “排列”->"全部垂直拼贴": &am…

去掉数组中头部和尾部的0numpy.trim_zeros()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 去掉数组中头部和尾部的0 numpy.trim_zeros() 选择题 以下说法错误的是? import numpy as np anp.array([0,0,1,2,3,4,0,0]) print("【显示】a:");print(a) print("【执行1】p…

Intellij IDEA SBT依赖分析插件

可分析模块和传递依赖 安装完插件后&#xff0c;由于IDEA BUG&#xff0c;会出现两个分析按钮&#xff0c;一个是gradle的&#xff0c;一般是后者是新安装的sbt。 选择需要分析的模块 只需要在project/plugins.sbt中添加代码&#xff0c;启动官方分析插件addDependencyTreeP…

【前端 | CSS】align-items与align-content的区别

align-items 描述 CSS align-items 属性将所有直接子节点上的 align-self 值设置为一个组。align-self 属性设置项目在其包含块中在交叉轴方向上的对齐方式 align-items是针对每一个子项起作用&#xff0c;它的基本单位是每一个子项&#xff0c;在所有情况下都有效果&…

postman入门基础 —— 接口测试流程

一、编写接口测试计划 接口测试计划和功能测试计划目标一致&#xff0c;都是为了确认需求、确定测试环境、确定测试方法&#xff0c;为设计测试用例做准备&#xff0c;初步制定接口测试进度方案。一般来说&#xff0c;接口测试计划包括概述、测试资源、测试功能、测试重点、测试…

C语言的动态分配空间C++的动态分配空间问题

动态分配空间 C&#xff1a;1、malloc 2、calloc C&#xff1a;new运算符 一 malloc malloc()&#xff1a; 这个函数用于分配一块指定大小的内存块&#xff0c;并返回一个指向该内存块的指针。语法如下&#xff1a; void* malloc(size_t size); 示例&#xff1a; int* ptr …

Android Studio瀑布流实现

效果&#xff1a; ImageDetail class package com.example.waterfallflow; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.widget.ImageView;public class ImageDetail extends Activity{Overrideprotected void …

web基础入门和php语言基础入门 二

web基础入门和php语言基础入门 二 MySQL入门-续MySQL之数据查询操作MySQL其他知识点 php语言基础入门认识PHPPHP的工作流程安装PHP环境认识一个PHP程序PHP基础知识点进入正题 PHP与WEB交互PHP与MySQL交互总结 MySQL入门-续 MySQL之数据查询操作 WHERE 子句&#xff0c;条件限…

对话即数据分析,网易数帆ChatBI做到了

大数据产业创新服务媒体 ——聚焦数据 改变商业 在当今数字化快速发展的时代&#xff0c;数据已经成为业务经营与管理决策的核心驱要素。无论是跨国大企业还是新兴创业公司&#xff0c;正确、迅速地洞察数据已经变得至关重要。然而&#xff0c;传统的BI工具往往对用户有一定的…

Destination Host Unreachable

背景&#xff1a;物理机的IP地址是192.168.31.189&#xff0c;虚拟机的IP地址是192.168.194.130 物理机ping得通虚拟机 虚拟机ping得通外网 可是虚拟机ping不通物理机 1、报错信息 Destination Host Unreachable 2、原因 用route -n命令查看路由表发现192.168.194.0没有走网…

读书笔记 |【项目思维与管理】➾ 项目成为一种生存方式

读书笔记 |【项目思维与管理】➾ 项目成为一种生存方式 一、理解项目固有的挑战二、项目对企业的价值三、知识型企业的经营逻辑四、做项目管理的推进者 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不迷路&#x1f496; 项目无处不在&#xff0c;项目已经成为…

9.3.2.2网络原理(传输层TCP)

TCP全部细节参考RFC标准文档 一.TCP特点: 有连接,可靠传输,面向字节流,全双工. 二.TCP数据报: 1.端口号是传输层的重要概念. 2.TCP的报头是变长的(UDP是固定的8字节),大小存在4位首部长度中,用4个bit位(0~15)表示长度单位是4字节.(TCP报头最大长度是60字节,前面20字节是固定…

Linux 复制进程fork

一、父进程和子进程 当前的一个进程在fork的时候可以复制当前的进程产生一个进程&#xff0c;这时产生出来的这个进程就是子进程&#xff0c;被复制的进程叫做父进程。子进程会将环境变量从父进程继承过来&#xff0c;或者说被拷贝过来。父进程也会有它的父进程&#xff0c;一…

四、Dubbo扩展点加载机制

四、Dubbo扩展点加载机制 4.1 加载机制概述 Dubbo良好的扩展性与框架中针对不同场景使用合适设计模式、加载机制密不可分 Dubbo几乎所有功能组件都是基于扩展机制&#xff08;SPI&#xff09;实现的 Dubbo SPI 没有直接使用 Java SPI&#xff0c;在它思想上进行改进&#xff…

【自用】云服务器 使用 docker 搭建 HomeAssistant + MQTT 物联网平台

总览 1.搭建流程概述 2.准备工作 3.开始搭建&#xff01; 4.总结 如果想看 ESP32 或其他使用 MicroPython 编程的单片机如何连接到该云服务器&#xff0c;实现 HomeAssistant 控制 单片机的内容&#xff0c;请看我这篇博客的下一篇。 一、搭建流程概述 0.总体流程 我们需要…

这四种订货系统不能选(二):不能独立部署

订货系统在传统批发贸易企业数字化转型中扮演着重要的角色。然而&#xff0c;有一种类型的订货系统并不适合选择&#xff0c;那就是无法独立部署的系统。 无法独立部署的订货系统意味着数据必须存放在软件厂商的服务器上。当我们选择这样的系统时&#xff0c;需要确保系统具备强…