一、题目
描述
给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的漂亮度是其所有字母漂亮度的总和
每个字母都有一个漂亮度,范围在1到26之间。没有任何两个不同字母拥有相同的漂亮度。字母忽略大小写。
给出多个字符串,计算每个字符串最大可能的漂亮度
数据范围
输入的名字长度满足 1<=n<=10000
输入
第一行一个整数N,接下来N行,每行一个字符串
输出
每个字符串最大可能的漂亮度
二、思路
创建一个大小为26的int型数组letter
letter数组下标从0到25分别代表从a到z
对字符串中的字母进行统计,数组letter中的元素大小表示对应字母出现的次数
将最高漂亮度分配给出现次数最多的字母,依次类推
三、自己写的代码
#include<stdio.h>
int main() {
    int n, i, j, k, max;
    int letter[26];
    scanf("%d", &n);
    char line[n][10002];
    int res[n];
    for (i = 0; i < n; i++) {
        scanf("%s", line[i]);
    }
    for (i = 0; i < n; i++) {
        j = 0;
        while (line[i][j] != '\0' && line[i][j] != 10) {
            letter[line[i][j] - 'a']++;
            j++;
        }
        res[i] = 0;
        for (j = 0; j < 26; j++) {
            max = 0;
            for (k = 0; k < 26; k++) {
                if (letter[k] > max) {
                    max = letter[k];
                }
            }
            if (max == 0) {
                j = 26;
                continue;
            }
            res[i] += (max * (26 - j));
            for (k = 0; k < 26; k++) {
                if (letter[k] == max) {
                    letter[k] = 0;
                    k = 26;
                }
            }
        }
    }
    for (i = 0; i < n; i++) {
        printf("%d\n", res[i]);
    }
    return 0;
}
四、测试




















