P4414 [COCI2006-2007#2] ABC

[COCI2006-2007#2] ABC

题面翻译

【题目描述】

三个整数分别为 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.题目分析

这道题,在第一次尝试了用c语言写时,遇到了一些问题:先键入数字,后键入字符串时,会影响之前的数字的值,因为在使用scanf函数时,这个操作c中缓存区会有残留,解决方案是:键入数字后,使用getchar()函数清空缓存区(目的是消耗scanf留下的换行符),并使用fget函数键入字符串。
代码如下:

        // 消耗scanf留下的换行符
        getchar();

        fgets(arr2, sizeof(arr2), stdin);

因为c语言这个方式不易理解,所以该换了java来做这道题。

2.题目思路

键入数字存入数组1,键入字符串存入数组2,数组1升序排序,循环数组2判断:A对应数组1的0索引,B对饮数组1的2索引,C对应数组1的3索引,打印对应的数组1元素即可。

3.代码演示(java)

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int a, temp;
        int[] arr1 = new int[3];

        Scanner sc = new Scanner(System.in);
        //键入三个整数
        for (int i = 0; i < 3; ++i) {
            a = sc.nextInt();
            arr1[i] = a;
        }
        //输入字符串,并转成字符数组
        String str = sc.next();
        char[] arr2 = str.toCharArray();
        //冒泡排序
        for (int i = 0; i < 3 - 1; ++i) {
            for (int j = 0; j < 3 - 1 - i; ++j) {
                if (arr1[j] > arr1[j + 1]) {
                    temp = arr1[j];
                    arr1[j] = arr1[j + 1];
                    arr1[j + 1] = temp;
                }
            }
        }
        //打印字符数组中对应的数字的顺序
        for (int i = 0; i < 3; ++i) {
            if (arr2[i] == 'A') {
                System.out.print(arr1[0]+ " ");
            } else if (arr2[i] == 'B') {
                System.out.print(arr1[1]+ " ");
            } else if (arr2[i] == 'C') {
                System.out.print(arr1[2]+ " ");
            }
        }
    }
}

你可能感兴趣的:(刷题go,go,go,python,开发语言)