一、题目
描述
给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的漂亮度是其所有字母漂亮度的总和
每个字母都有一个漂亮度,范围在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;
}