【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解

花无缺

‍博客主页:@花无缺
欢迎 点赞 收藏⭐ 留言 加关注✅!
本文由 花无缺 原创

收录于专栏 【洛谷算法题】


文章目录

  • 【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解
    • 题目描述
    • 输入格式
    • 输出格式
    • 题面翻译
    • 样例 #1
      • 样例输入 #1
      • 样例输出 #1
    • 样例 #2
      • 样例输入 #2
      • 样例输出 #2
    • 题解
    • 总结


【洛谷算法题】P4414-[COCI2006-2007#2] ABC【入门2分支结构】Java题解

[COCI2006-2007#2] ABC - 洛谷

题目描述

You will be given three integers A, B and C. The numbers will not be given in that exact order, but we do know that A is less than B and B less than C.
In order to make for a more pleasant viewing, we want to rearrange them in the given order.

输入格式

The first line contains three positive integers A, B and C, not necessarily in that order. All three numbers will be less than or equal to 100.
The second line contains three uppercase letters ‘A’, ‘B’ and ‘C’ (with no spaces between them) representing the desired order.

输出格式

Output the A, B and C in the desired order on a single line, separated by single spaces.

题面翻译

【题目描述】

三个整数分别为 A , B , C A,B,C A,B,C。这三个数字不会按照这样的顺序给你,但它们始终满足条件: A < B < C A < B < C A<B<C。为了看起来更加简洁明了,我们希望你可以按照给定的顺序重新排列它们。

【输入格式】

第一行包含三个正整数 A , B , C A,B,C A,B,C,不一定是按这个顺序。这三个数字都小于或等于 100 100 100。第二行包含三个大写字母 A A A B B B C C C(它们之间没有空格)表示所需的顺序。

【输出格式】

在一行中输出 A A A B B B C C C,用一个 (空格)隔开。

样例 #1

样例输入 #1

1 5 3
ABC

样例输出 #1

1 3 5

样例 #2

样例输入 #2

6 4 2
CAB

样例输出 #2

6 2 4

题解

import java.util.Scanner;
import java.util.Arrays;

public class P4414 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 数组 a 保存三个整数
        int[] a = new int[3];
        for (int i = 0; i < a.length; i++) {
            a[i] = in.nextInt();
        }
        // 将整数进行从小到大排序
        Arrays.sort(a);
        // 将三个大写字母作为一个字符串读取
        String str = in.next();
        for (int i = 0; i < a.length; i++) {
            // 根据字母的 ASCII 码和数组 a 的下标的对应关系输出对应的字母
            // A 对应数值最小的数, 也就是 a[0]
            // B 对应数值中间大的数, 也就是 a[1]
            // C 对应数值最小的数, 也就是 a[2]
            System.out.print(a[str.charAt(i) - 65]);
            // 输出空格
            if (i != 2)
                System.out.print(" ");
        }
        in.close();
    }
}

总结

题意:根据三个字母的顺序重新排序三个整数的顺序,字母 A 对应最小的数,字母 B 对应大小为第二的数,字母 C 对应最大的数。

这个题我们其实可以采用一种很直接的方式就是使用选择结构,根据 ABC 顺序的不同,输出 3 个整数的不同的顺序,例如对于样例#1 :“1 5 3”,如果字母是 “ABC”,我们就输出“1 3 5”,如果字母是 “”ACB,我们就输出”1 5 3“,依次类推。

虽然这种方式很直接简单,但是未免太低效了一点。这里我采用了一种更为高效的方法,因为 ABC 三个字符在 ASCII 码表中是连续的,所以他们的 ASCII 码是连续递增的,一个比一个大,所以我们可以将整数存储在数组中,并将字符的 ASCII 码与数组的下标对应起来,那么具体如果对应呢,ABC 的 ASCII 码是依次递增的,数组的下标也是依次递增的,所以我们可以根据这个关系,将数组中的整数按从小到大的顺序排列,然后根据字符顺序输出对应的整数。

再多思考一些,其实以上思路就是数据结构“哈希表”的一个非常简单的应用,如果你不知道什么是“哈希表”,但是对算法很感兴趣,可以尝试搜索“哈希表”;

另外,上题你可能会遇到的语法问题,输入字符串时不要使用 nextLine(),不然会发生异常。如果你说我就想用 next() 不行吗,答案是可以,但是要在这之前加上一条语句:in.nextLine()

作者:花无缺(huawuque404.com)


欢迎关注我的博客:花无缺-每一个不曾起舞的日子都是对生命的辜负~
一起进步-刷题专栏:【洛谷算法题】
往期精彩好文:
【CSS选择器全解指南】
【HTML万字详解】
你们的点赞 收藏⭐ 留言 关注✅
是我持续创作,输出优质内容的最大动力!
谢谢!

你可能感兴趣的:(洛谷算法题,算法,数据结构,java)