L1-023. 輸出GPLT(Java)PAT團體程序設計天梯賽-練習集

給定一個長度不超過10000的、僅由英文字母構成的字符串。請將字符重新調整順序,按“GPLTGPLT….”這樣的順序輸出,並忽略其它字符。當然,四種字符(不區分大小寫)的個數不一定是一樣多的,若某種字符已經輸出完,則餘下的字符仍按GPLT的順序打印,直到所有字符都被輸出。

輸入格式:

輸入在一行中給出一個長度不超過10000的、僅由英文字母構成的非空字符串。

輸出格式:

在一行中按題目要求輸出排序後的字符串。題目保證輸出非空。

輸入樣例:

pcTclnGloRgLrtLhgljkLhGFauPewSKgt

輸出樣例:

GPLTGPLTGLTGLGLL


這道題限時150ms,建議使用C或C++

#include <stdio.h>
#include <string.h>
#include <iostream>
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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章