字符串的完美度
这是CSDN上的一道简单题目。许久没有用C,找找感觉。
我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同,
而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。
现在给定一个字符串,输出它的最大可能的完美度。
例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。
#include <stdio.h> #include <stdlib.h> #include <string.h> int perfect(const char *s) { int i, j, c, tmp ,sum= 0; int a[91] = {0}; while (c = *s++) { a[(c>90)?(c-32):c]++; // 把字符型当作整形处理,如果a['c'] = 1,则表示字符c在字符串中总共出现了1次。类似基数排序。 } // 从大到小排序,方便后续计算 for (i = 0; i < 91; i++) { for (j = 90; j > i; j--) { if (a[j] > a[j-1]) { tmp = a[j-1]; a[j-1] = a[j]; a[j] = tmp; } } } for (i = 0;a[i] != 0;i++ ){ sum += (26 - i) * a[i]; } return sum; } //start 提示:自动阅卷起始唯一标识,请勿删除或增加。 int main() { printf("%d",perfect("dad")); } //end //提示:自动阅卷结束唯一标识,请勿删除或增加。
冒泡排序写错了好几次……
虽然刚刚熟悉了公司开发的框架,不过这里要给自己提个醒:以后既要会框架,也要不会框架。