题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 10
#define MAX_WORDS 1000
// 检查两个单词是否是兄弟单词
int areBrotherWords(char word1[], char word2[]) {
    // 如果两个单词长度不同,则它们不可能是兄弟单词
    if (strlen(word1) != strlen(word2))
        return 0;
    // 统计两个单词中每个字母出现的次数
    int count1[26] = {0};
    int count2[26] = {0};
    for (int i = 0; i < strlen(word1); i++) {
        count1[word1[i] - 'a']++;
        count2[word2[i] - 'a']++;
    }
    // 检查每个字母出现的次数是否相同
    for (int i = 0; i < 26; i++) {
        if (count1[i] != count2[i])
            return 0;
    }
    return 1;
}
// 根据字典和给定的单词找到兄弟单词的个数
int findBrotherWordsCount(char dictionary[][MAX_LENGTH], int n, char x[]) {
    int count = 0;
    for (int i = 0; i < n; i++) {
        if (strcmp(dictionary[i], x) != 0 && areBrotherWords(dictionary[i], x))
            count++;
    }
    return count;
}
// 根据字典和给定的单词找到字典序排列后的第k个兄弟单词
void findKthBrotherWord(char dictionary[][MAX_LENGTH], int n, char x[], int k) {
    char brotherWords[MAX_WORDS][MAX_LENGTH];
    int count = 0;
    // 找到所有兄弟单词
    for (int i = 0; i < n; i++) {
        if (strcmp(dictionary[i], x) != 0 && areBrotherWords(dictionary[i], x)) {
            strcpy(brotherWords[count], dictionary[i]);
            count++;
        }
    }
    // 按字典序排序兄弟单词
    for (int i = 0; i < count - 1; i++) {
        for (int j = i + 1; j < count; j++) {
            if (strcmp(brotherWords[i], brotherWords[j]) > 0) {
                char temp[MAX_LENGTH];
                strcpy(temp, brotherWords[i]);
                strcpy(brotherWords[i], brotherWords[j]);
                strcpy(brotherWords[j], temp);
            }
        }
    }
    // 输出第k个兄弟单词
    if (k <= count)
        printf("%s\n", brotherWords[k - 1]);
}
int main() {
    int n;
    scanf("%d", &n);
    char dictionary[MAX_WORDS][MAX_LENGTH];
    for (int i = 0; i < n; i++)
        scanf("%s", dictionary[i]);
    char x[MAX_LENGTH];
    scanf("%s", x);
    int k;
    scanf("%d", &k);
    int brotherWordsCount = findBrotherWordsCount(dictionary, n, x);
    printf("%d\n", brotherWordsCount);
    findKthBrotherWord(dictionary, n, x, k);
    return 0;
}
排行榜第20. //用C写程序真的强。
查看23道真题和解析