PAT (Basic Level) Practice (中文)1043 输出PATest (20 分)(C实现)

题目描述:

给定一个长度不超过 10 ​ 4 10​^4 104 的、仅由英文字母构成的字符串。请将字符重新调整顺序,按 PATestPATest… 这样的顺序输出,并忽略其它字符。当然,六种字符的个数不一定是一样多的,若某种字符已经输出完,则余下的字符仍按 PATest 的顺序打印,直到所有字符都被输出。

输入格式:

输入在一行中给出一个长度不超过 1 0 4 10^4 104​​ 的、仅由英文字母构成的非空字符串。

输出格式:

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

输入样例:

redlesPayBestPATTopTeePHPereatitAPPT

输出样例:

PATestPATestPTetPTePePee

代码示例(C实现)

#include 

int main() 
{
    // 声明一个数组,存放每一种字符的个数
    int patEst[6];
    char patEsts[] = "PATest";

    char str[10000] = "";
    scanf("%s", &str);

    for (int i = 0; i < 10000; i++) {
        char c = str[i];
        switch (c) {
            case 'P':
                patEst[0]++;
                break;
            case 'A':
                patEst[1]++;
                break;
            case 'T':
                patEst[2]++;
                break;
            case 'e':
                patEst[3]++;
                break;
            case 's':
                patEst[4]++;
                break;
            case 't':
                patEst[5]++;
                break;
            default:
                break;
        }
    }

    // 遍历一下统计结果数组
    // 最小值
    int minCount = 0XFFFFFF;
    int zeroCount = 0;
    for (int i = 0; i < 6; i++) {
        if (patEst[i] < minCount) {
            minCount = patEst[i];
        }
        if (patEst[i] == 0) {
            zeroCount++;
        }
    }

    // 输出 minCount PATest
    for (int i = 0; i < minCount; i++) {
        printf("%s", "PATest");
    }
    // 重新统计个数
    for (int i = 0; i < 6; i++) {
        patEst[i] -= minCount;
    }

    // 输出
    while (true) {
        // 每次一个轮询
        int k = 0;
        for (int i = 0; i < 6; i++) {
            if (patEst[i] != 0) {
                printf("%c", patEsts[i]);
                patEst[i]--;
            } else {
                // 会被记录多次,错误
                k++;
            }
        }
        if (k == 6) {
            break;
        }
    }

    return 0;
}

你可能感兴趣的:(C,PAT,算法题)