HJ27 查找兄弟单词

HJ27 查找兄弟单词

描述

定义一个单词的“兄弟单词”为:交换该单词字母顺序(注:可以交换任意次),而不添加、删除、修改原有的字母就能生成的单词。

兄弟单词要求和原来的单词不同。例如: ab 和 ba 是兄弟单词。 ab 和 ab 则不是兄弟单词。

现在给定你 n 个单词,另外再给你一个单词 x ,让你寻找 x 的兄弟单词里,按字典序排列后的第 k 个单词是什么?

注意:字典中可能有重复单词。

数据范围:1≤n≤1000 ,输入的字符串长度满足 1≤len(str)≤10 ,1≤k<n

输入描述:

输入只有一行。 先输入字典中单词的个数n,再输入n个单词作为字典单词。 然后输入一个单词x 最后后输入一个整数k

输出描述:

第一行输出查找到x的兄弟单词的个数m 第二行输出查找到的按照字典顺序排序后的第k个兄弟单词,没有符合第k个的话则不用输出。

示例1

输入:

3 abc bca cab abc 1

输出:

2
bca

解:本题主要考虑两个方面的内容,一个是兄弟单词的判断,另一个就是兄弟单词的排序。

其中兄弟单词的判断可以通过分别将目标单词和对比单词进行按照字典顺序进行排序对比,则可完成兄弟单词的判断,同理兄弟单词的排序也可以用同样的方式。

#include
#include
/*将数组按从小到大顺序排列*/
void sortstring(char str[],int strlen){
    for(int i=0;istr[j]){
                char temp = str[i];
                str[i] = str[j];
                str[j] = temp;
            }
        }
    }
}
int main(){
    /*变量初始化*/
    int num = 0;
    int key = 0;
    char arr[1000][10]={0};
    char arraim[1000][10]={0};
    char aim[10]={0};
    /*分别取出单词个数n,n个字典单词,目标单词x和目标单词个数K*/
    scanf("%d",&num);
    for(int i=0;i0){
                strcpy(another,arraim[i]);
                strcpy(arraim[i],arraim[j]);
                strcpy(arraim[j],another);
            }
        }
    }
    /*分别输出兄弟单词的个数和目标位置的兄弟数组*/
    printf("%d\n",index);
    printf("%s",arraim[key-1]);
}

你可能感兴趣的:(华为机考,算法,c++,c语言)