题解 | #查找兄弟单词#
查找兄弟单词
https://www.nowcoder.com/practice/03ba8aeeef73400ca7a37a5f3370fe68
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void* x, const void* y)
{
const char* a = x;
const char* b = y;
return *a - *b > 0 ? 1 : -1;
}
int IsBro(char* str3, char* str4)
{
char str1[1000];
char str2[1000];
strcpy(str1,str3);
strcpy(str2,str4);
if (strcmp(str1, str2) == 0)
{
return 0;
}
qsort(str1, strlen(str1), 1, cmp);
qsort(str2, strlen(str2), 1, cmp);
if (strcmp(str1, str2) != 0)
{
return 0;
}
return 1;
}
int main() {
int n = 0;
int i = 0, j = 0;
int index = 0;
scanf("%d", &n);
//放字典单词
char* str[1000] = { 0 };
for (int i = 0; i < 1000; i++)
{
str[i] = (char*)calloc(100, sizeof(char));
}
while(i < n)
{
scanf("%s", str[i]);
i++;
}
//输入正经单词
char word[100] = {0};
scanf("%s", word);
//输入要的第k个字典单词的序号
int k = 0;
scanf("%d", &k);
//与字典单词比较+整理兄弟单词
char* bro[1000] = { 0 };
for (int i = 0; i < 1000; i++)
{
bro[i] = (char*)calloc(100, sizeof(char));
}
int isBroCount = 0;
for(i = 0; i < n; i++)
{
if(IsBro(str[i], word))
{
isBroCount++;
strcpy(bro[index++],str[i]);
}
}
printf("%d\n", isBroCount);
//对字典单词进行排序 x!
//对兄弟单词进行排序 √!
for(i = 0; i < isBroCount; i++)
{
for(j = 0; j < isBroCount-1-i; j++)
{
if(strcmp(bro[j],bro[j+1]) >= 0)
{
char tmp[1000];
strcpy(tmp, bro[j]);
strcpy(bro[j], bro[j+1]);
strcpy(bro[j+1], tmp);
}
}
}
if(IsBro(bro[k-1], word))
{
puts(bro[k-1]);
}
return 0;
}
vivo公司氛围 351人发布