POJ 1318
2013-10-02 09:45
387 查看
poj1318
该题和编程珠玑上的有道题很相似。 给出一个字典,字典中的单词唯一,一个单词, 找到这个单词在字典中的所有变位词。
变位词是指两个单词的字母相同,组合顺序不同。比如part , trap就互为变位词。解题关键:变位词有相同的特征码。
#include<iostream> #include<fstream> #include<cstdlib> using namespace std; //#define DEBUG struct word { char str[8]; char id[8]; int len; }; int cmp(const void *a, const void *b)/* 升序排列 */ { return *(char *)a - *(char *)b; } int strcmp(const void *a, const void *b)/* 升序排列 */ { struct word aa = *(struct word*)a; struct word bb = *(struct word*)b; return strcmp(aa.str, bb.str); } static struct word dict[100]; /* void qsort(void *base, int nelem, int width, int (*fcmp)(const void *,const void *)) */ int main() { #ifdef DEBUG fstream cin("G:\\book\\algorithms\\acm\\Debug\\dat.txt"); #endif int n = 0; char tmp[8]; while (true) { cin >> tmp; if (!strcmp(tmp, "XXXXXX")) break; int len; dict .len = len = strlen(tmp); strcpy(dict .str, tmp); qsort(tmp, len, sizeof(tmp[0]), cmp); strcpy(dict .id, tmp); n++; } qsort(dict, n, sizeof(dict[0]), strcmp); while (true) { cin >> tmp; if (!strcmp(tmp, "XXXXXX")) break; int len = strlen(tmp); int find = 0; qsort(tmp, len, sizeof(tmp[0]), cmp); for(int i = 0; i < n; i++) { if (!strcmp(tmp, dict[i].id)) { printf("%s\n",dict[i].str); find = 1; } } if (find == 0) printf("NOT A VALID WORD\n"); printf("******\n"); } return 0; }
该题和编程珠玑上的有道题很相似。 给出一个字典,字典中的单词唯一,一个单词, 找到这个单词在字典中的所有变位词。
变位词是指两个单词的字母相同,组合顺序不同。比如part , trap就互为变位词。解题关键:变位词有相同的特征码。
相关文章推荐
- POJ1318 Word Amalgamation 简单模拟
- poj 1318 Word Amalgamation
- poj 1318 Word Amalgamation
- POJ 1318 Word Amalgamation (简单题)
- POJ 1318
- POJ 1318 Word Amalgamation
- Poj1318 解密
- poj 1318 Word Amalgamation map的使用
- POJ 1318 水题积累
- POJ 1318 Word Amalgamation 笔记
- POJ 1318 Word Amalgamation (字符串 STL大水)
- POJ-1318-Word Amalgamation-STL的使用
- POJ 1318 (排序,sort函数)
- POJ 1318 字典排序
- POJ 题目1318 Word Amalgamation(排序,水)
- poj 1318(Word Amalgamation)
- POJ 1318 Word Amalgamation 水
- POJ 1318
- POJ-1318(list.sort()输出不为字典序,map才是按字典序排列)
- poj 1318