字符串的完美度

这是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 //提示:自动阅卷结束唯一标识,请勿删除或增加。  

 

冒泡排序写错了好几次……

虽然刚刚熟悉了公司开发的框架,不过这里要给自己提个醒:以后既要会框架,也要不会框架。

posted on 2013-10-24 17:50  SZlibraco  阅读(238)  评论(0编辑  收藏  举报