思路:判断兄弟单词到时候,可能也许会存在大写字母,则-‘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; }