题解 | #字符统计#

字符统计

http://www.nowcoder.com/practice/c1f9561de1e240099bdb904765da9ad0

两次排序,但没有榜2大哥代码简短

#include <stdio.h>
void sort(int* arr, int beg, int end) {//ascending bubble sort
    for (int i = beg; i < end - 1; i++)
        for (int j = beg; j + 1 < end - (i - beg); j++)
            if (arr[j] > arr[j + 1]) {
                int t = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = t;
            }
}
int main() {
    char str[1001];
    while (~scanf("%s", str)) {
        int len, ch[128], sum[128];
        for (len = 0; len < 128; len++) {
            ch[len] = len;
            sum[len] = 0;
        }
        //done:initialization
        for (len = 0; str[len]; len++)sum[str[len]]++;
        //done:statement
        for (int i = 0; i < 128 - 1; i++)
            for (int j = 0; j + 1 < 128 - i; j++)
                if (sum[j] < sum[j + 1]) {//descending bubble sort
                    int t = sum[j];
                    sum[j] = sum[j + 1];
                    sum[j + 1] = t;
                    t = ch[j];
                    ch[j] = ch[j + 1];
                    ch[j + 1] = t;
                }
        for (int i = 0; sum[i]; i++) {
            int j = i;
            while (sum[j] != sum[i])j++;
            sort(ch, i, j);
            i = j;
        }
        for (int i = 0; sum[i]; i++) {
            printf("%c", ch[i]);
        }
        printf("\n");
    }
}

附:榜2大哥代码,更简短,妙

#include <stdio.h>
#include <string.h>
 
int main()
{
    char str[1000] = {0};
    while (~scanf("%s", str)) {
        int cnt[200] = {0};
        int max = 0;
        for (int i = 0; i < strlen(str); i++) {
            cnt[str[i]]++;
            max = (max > cnt[str[i]]) ? max : cnt[str[i]];
        }
        for (int i = max; i > 0; i--) {
            //j为char
            for (char j = '0'; j < 'z'+1; j++) {
                if (cnt[j] == i) {
                    printf("%c", j);
                }
            }
        }
        printf("\n");
    }
    return 0;
}
全部评论
妙蛙
点赞 回复 分享
发布于 05-23 21:16 江西

相关推荐

不愿透露姓名的神秘牛友
07-09 12:02
ssob上原来真有BOSS啊
硫蛋蛋:这种也是打工的,只不是是给写字楼房东打工
点赞 评论 收藏
分享
05-26 22:25
门头沟学院 Java
Java小肖:不会是想叫你过去把你打一顿吧,哈哈哈
点赞 评论 收藏
分享
06-08 22:25
门头沟学院 Java
从零开始的转码生活:这hr不会打开手机不分青红皂白给所有人群发这句话,过一会再给所有人再发一遍,这肯定会有重复的,不管,再过一会再发一遍
点赞 评论 收藏
分享
评论
12
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务