算法竞赛入门经典-第五章字母重排

来源:互联网 发布:淘宝店铺取什么名字好 编辑:程序博客网 时间:2024/05/12 00:14
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int n;
char word[2000][10], sorted[2000][10];
int cmp_char(const void* _a, const void* _b) {
  char* a = (char*)_a;
  char* b = (char*)_b;
  return *a - *b;//??为什么返回指针的差值??
}
int cmp_string(const void* _a, const void* _b) {
  char* a = (char*)_a;
  char* b = (char*)_b;
  return strcmp(a, b);
}
int main() {
  n = 0;
  for(;;) {
    scanf("%s", word[n]);
    if(word[n][0] == '*') break;
    n++;
  }
  qsort(word, n, sizeof(word[0]), cmp_string);
  for(int i = 0; i < n; i++) {
    strcpy(sorted[i], word[i]);
    qsort(sorted[i], strlen(sorted[i]), sizeof(char), cmp_char);
  }
  char s[10];
  while(scanf("%s", s) == 1) {
    qsort(s, strlen(s), sizeof(char), cmp_char);
    int found = 0;
    for(int i = 0; i < n; i++)
      if(strcmp(sorted[i], s) == 0) {
        found = 1;
        printf("%s ", word[i]);
      }
    if(!found) printf(":(");
    printf("\n");
  }
  return 0;
}
//分析思路:
//1.先对输入的字典以单词为单位按照字典序进行排序
//2.对每个字典中的单词按照字符进行排序 排序结果另存到一个二维数组中用于比较
//3.读入要检查的单词直到文件结尾
//4.每个单词进行比较,若相同,输出原来单词,不同,进行下一个比较
//我会怎么写.....
//1.可以改进数据结构 用结构体 2.也是遇见就输出
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct info{
    char word[6];
    char sort[6];
}dic[2000];
int cmp_char(const void* _a, const void* _b) {
  char* a = (char*)_a;
  char* b = (char*)_b;
  return *a - *b;//??为什么返回指针的差值??
}
int cmp_string(const void* _a, const void* _b) {
  char* a = (char*)_a;
  char* b = (char*)_b;
  return strcmp(a, b);
}
char input[6];
int main()
{
    int n,i;
    n=0;
    memset((void *)dic,0,2000*sizeof(dic[0]));
    do{
        scanf("%s",&dic[n].word[0]);
        n++;
    }while(dic[n].word[0]!='*');
    dic[n].word[0]='\n';//??qsort是否需要进行强制类型转化?
    qsort((void *)dic,n,sizeof(dic[0]),cmp_string);//因为后面的全是0,所以整体的顺序就是字典单词的顺序
    for(i=0;i<n;i++)
    {
        strcpy(dic[i].word,dic[i].sort);
        qsort(dic[i].sort,n,sizeof(dic[0].sort),cmp_char);
    }
    while(scanf("%s", input) == 1) {
        qsort(input, strlen(input), sizeof(char), cmp_char);
    for(i=0;i<n;i++)
    {
        if(strcmp(input,dic[i].sort)==1)
            printf("%s",dic[i].word);
        printf(" ");
    }
    printf("\n");
    return 0;
}//1.还是不太明白qsort的用法
//2.自己思路不清晰没有自己的想法
//选择合适的数据结构很重要....
//数据结构的选择其实就是看数据之间的关系
//就好比这个程序,数据之间,排序后和未排序后的同一个单词之间的联系
//没有相邻两个单词之间的联系紧密,所以选择结构体就可能比较麻烦
//。。。。自己要原地爆炸boom
0 0
原创粉丝点击