HJ45. 名字的漂亮度
描述
给出一个字符串,该字符串仅由小写字母组成,定义这个字符串的“漂亮度”是其所有字母“漂亮度”的总和。
每个字母都有一个“漂亮度”,范围在1到26之间。没有任何两个不同字母拥有相同的“漂亮度”。字母忽略大小写。
输入描述
第一行一个整数N,接下来N行每行一个字符串
输出描述
每个字符串可能的最大漂亮程度
示例1
输入:
2 zhangsan lisi
输出:
192 101
说明:
对于样例lisi,让i的漂亮度为26,l的漂亮度为25,s的漂亮度为24,lisi的漂亮度为25+26+24+26=101.C 解法, 执行用时: 1ms, 内存消耗: 324KB, 提交时间: 2020-12-16
#include <stdio.h> //#include <ctype.h> int main() { int N;//整数N,后续N个名字 char str[100000]; int length; int temp; int sum; while(scanf("%d\n",&N)!=EOF) { for(int n=1;n<=N;n++) { scanf("%s\n",&str); length=strlen(str); sum=0; //统计每个字符的数量 初始化为0 int arr[26]={0}; //检测字符是什么 for(int i=0;i<length;i++) { str[i]=toupper(str[i]); arr[str[i]-'A']++; } for(int i=0;i<26-1;i++) { for(int j=0;j<26-1-i;j++) { if(arr[j]<arr[j+1]) //从大到小排列 { temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } for(int i=0;i<26;i++) { sum=sum+(arr[i]*(26-i)); // if(arr[i]==0) // break; } printf("%d\n",sum); } } return 0; }
C 解法, 执行用时: 1ms, 内存消耗: 344KB, 提交时间: 2021-09-07
#include <stdio.h> #include <string.h> int main(){ int n; while(scanf("%d", &n) != EOF){ for(int i = 0; i < n; i++){ char s[10000] = {0}; scanf("%s", s); int len = strlen(s); int a[26] = {0}; int sum = 0; int tmp = 0; for(int j = 0; j < len; j++){ if(s[j] >= 'a' && s[j] <= 'z') a[s[j] - 'a'] ++; else if(s[j] >= 'A' && s[j] <= 'Z') a[s[j] - 'A'] ++; } for(int j = 0; j < 26; j++){ for(int k = 0; k < 25 - j; k++){ if(a[k] > a[k+1]){ tmp = a[k]; a[k] = a[k+1]; a[k+1] = tmp; } } } for(int j = 25; j >= 0; j--){ sum = sum + a[j] * (j+1); } printf("%d\n", sum); } } return 0; }