L1-023. 输出GPLT(Java)PAT团体程序设计天梯赛-练习集

给定一个长度不超过10000的、仅由英文字母构成的字符串。请将字符重新调整顺序,按“GPLTGPLT….”这样的顺序输出,并忽略其它字符。当然,四种字符(不区分大小写)的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按GPLT的顺序打印,直到所有字符都被输出。

输入格式:

输入在一行中给出一个长度不超过10000的、仅由英文字母构成的非空字符串。

输出格式:

在一行中按题目要求输出排序后的字符串。题目保证输出非空。

输入样例:

pcTclnGloRgLrtLhgljkLhGFauPewSKgt

输出样例:

GPLTGPLTGLTGLGLL


这道题限时150ms,建议使用C或C++

#include 
#include 
#include 
using namespace std;

int main()
{
    char str[10001];
    cin >> str;
    int len = strlen(str);
    // 分别表示四个字母的个数
    int G_len = 0, P_len = 0, L_len = 0, T_len = 0;

    for (int i = 0; i < len; i++) {
        // 转为大写
        str[i] = toupper(str[i]); 
        switch (str[i]) {
        case 'G':
            G_len++;        // 出现个数加一
            break;

        case 'P':
            P_len++;
            break;

        case 'L':
            L_len++;
            break;

        case 'T':
            T_len++;
            break;

        default:
            break;
        }
    } // for 

    // 一直输出,直到四个字母个数都为 0
    while (G_len || P_len || L_len || T_len) {
        // 如果一个字母个数大于0,就输出
        // 否则输出后面的字母
        if (G_len > 0) {
            printf("G");
            G_len--;            // 输出后,个数减一
        }

        if (P_len > 0) {
            printf("P");
            P_len--;
        }

        if (L_len > 0) {
            printf("L");
            L_len--;
        }

        if (T_len > 0) {
            printf("T");
            T_len--;
        }
    } // while

    return 0;
 } 

Java代码,使用Scanner,最后一个测试点超时,建议可以试试BufferReader:

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        char[] str = scanner.next().toUpperCase().toCharArray();
        // 分别计数四个字母出现的次数
        int G_len = 0, P_len = 0, L_len = 0, T_len = 0;

        for (int i = 0; i < str.length; i++) {
            switch (str[i]) {
            case 'G':
                G_len++;
                break;

            case 'P':
                P_len++;
                break;

            case 'L':
                L_len++;
                break;

            case 'T':
                T_len++;
                break;

            default:
                break;
            }
        }

        // 一直输出,直到所有字母个数都为 0
        while (G_len > 0 || P_len > 0 || L_len > 0 || T_len > 0) {
            if (G_len > 0) {
                System.out.print('G');
                G_len--;
            }

            if (P_len > 0) {
                System.out.print('P');
                P_len--;
            }

            if (L_len > 0) {
                System.out.print('L');
                L_len--;
            }

            if (T_len > 0) {
                System.out.print('T');
                T_len--;
            }
        }
    }

}

python 代码,可以在PTA平台提交,未超时:

            string = input()
            string = string.upper()

            G_len = string.count('G')
            P_len = string.count('P')
            L_len = string.count('L')
            T_len = string.count('T')

            while G_len > 0 or P_len > 0 or L_len > 0 or T_len > 0:
                if G_len > 0:
                    print('G', end="")
                    G_len -= 1

                if P_len > 0:
                    print('P', end="")
                    P_len -= 1

                if L_len > 0:
                    print('L', end="")
                    L_len -= 1

                if T_len > 0:
                    print('T', end="")
                    T_len -= 1

你可能感兴趣的:(L1-023. 输出GPLT(Java)PAT团体程序设计天梯赛-练习集)