这类题一个思路,用字符对应的ascii码做下标,按题目要求顺序打印就可以了。
for循环的i=1000,可以优化下取最多的字符次数,减少循环次数。tmp['z']也可以优化。
#include "stdio.h"
#include "string.h"

char str[1001] = {0};
int tmp['z'] = {0};

int main(void) {
    int i, j;

    scanf("%s", str);
    int len = strlen(str);
    for (i = 0; i < len; i++) {
        tmp[str[i]] ++;
    }

    for (i = 1000; i > 0; i--) {
        for (j = '0'; j <= '9'; j++) {
            if (tmp[j] == i) {
                printf("%c", j);
            }
        }
        for (j = 'a'; j <= 'z'; j++) {
            if (tmp[j] == i) {
                printf("%c", j);
            }
        }
    }

    return 0;
}