思路:判断兄弟单词到时候,可能也许会存在大写字母,则-‘A’,然后循环判断是否相等。
注意:要求找的是字典排序第k大的兄弟单词,需要将兄弟单词排序后再输出。神坑!!!
//判断是否为兄弟单词
#include<stdio.h>
#include<string.h>
int judge(char* a,char* b){
//单词相等则不是兄弟单词,直接输出0
if(!strcmp(a, b))
return 0;
//长度不等则不是兄弟单词,直接输出0
int aLen = strlen(a);
int bLen = strlen(b);
if(aLen != bLen)
return 0;
char c['z' - 'A'] = {0},d['z' - 'A'] = {0};
for(int i =0;i<aLen;i++){
c[a[i]-'A']++;
d[b[i]-'A']++;
}
//循环判断,不等则直接输出0
for(int i = 0; i < 'z' - 'A'; i++){
if(c[i] != d[i])
return 0;
}
return 1;
}
int main(void){
int n;
while(scanf("%d",&n) != EOF){
char str[n][1000],bro[n][1000],x[1000]={0};
int k,key = 0;
for(int i = 0;i<n;i++){
scanf("%s",&str[i]);
}
scanf("%s",&x);
scanf("%d",&k);
//获取兄弟单词并排序,注意,他是要输出==》字典序第k大的那个单词。。。。坑!!!
for(int i = 0;i<n;i++){
if(judge(x, str[i])){
strcpy(&bro[key], str[i]);
//将兄弟单词排序
for(int j = key-1;j>= 0;j--){
if(strcmp(str[i], bro[j])<0){
strcpy(&bro[j+1], bro[j]);
strcpy(&bro[j],str[i]);
}
}
key++;
}
}
printf("%d\n",key);
if(k <= key && k > 0){
printf("%s\n",bro[k-1]);
}
}
return 0;
}
京公网安备 11010502036488号