Word Amalgamation 

In millions of newspapers across the United States there is a word game called Jumble. The object of this game is to solve a riddle, but in order to find the letters that appear in the answer it is necessary to unscramble four words. Your task is to write a program that can unscramble words.

Input

The input file contains four parts:

1.
a dictionary, which consists of at least one and at most 100 words, one per line;
2.
a line containing XXXXXX, which signals the end of the dictionary;
3.
one or more scrambled `words' that you must unscramble, each on a line by itself; and
4.
another line containing XXXXXX, which signals the end of the file.

All words, including both dictionary words and scrambled words, consist only of lowercase English letters and will be at least one and at most six characters long. (Note that the sentinel XXXXXX contains uppercaseX's.) The dictionary is not necessarily in sorted order, but each word in the dictionary is unique.

Output

For each scrambled word in the input, output an alphabetical list of all dictionary words that can be formed by rearranging the letters in the scrambled word. Each word in this list must appear on a line by itself. If the list is empty (because no dictionary words can be formed), output the line ``NOT A VALID WORD" instead. In either case, output a line containing six asterisks to signal the end of the list.

Sample Input

tarp
given
score
refund
only
trap
work
earn
course
pepper
part
XXXXXX
resco
nfudre
aptr
sett
oresuc
XXXXXX

Sample Output

score
******
refund
******
part
tarp
trap
******
NOT A VALID WORD
******
course
******

sort代码

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
char word[100][7];
char* dic[100];
char* seq[100];
char str[7]; bool compare(char *p1, char *p2)
{
return strcmp(p1,p2)<0;
}
int main()
{
int n ;
for (n = 0; scanf("%s", word[n]) && strcmp(word[n], "XXXXXX") != 0; n++);
for (int i=0; i < n; i++)
dic[i] = word[i];
sort(dic,dic+n,compare);
for (int i = 0; i < n; i++)
{
seq[i] = (char *)malloc(strlen(dic[i])+1);
strcpy(seq[i],dic[i]);
sort(seq[i],seq[i]+strlen(seq[i]));
}
while (scanf("%s", str) && strcmp(str, "XXXXXX") != 0)
{
int found = 0;
sort(str,str+strlen(str));
for (int i = 0; i < n;i++)
if (strcmp(str, seq[i]) == 0)
{
found = 1;
printf("%s\n",dic[i]);
}
if (found == 0)
printf("NOT A VALID WORD\n");
printf("******\n");
}
return 0;
}

  用qsort代码

#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
char word[100][7];
char seq[100][7];
char str[7];
int comp_char(const void * p1, const void * p2)
{
return *(char *)p1 - *(char *)p2;
}
int compare(const void *p1, const void *p2)
{
return strcmp((char *)p1, (char *)p2);
}
int main()
{
int n;
for (n = 0; scanf("%s", word[n]) && strcmp(word[n], "XXXXXX") != 0; n++);
qsort(word,n,sizeof(word[0]),compare);
for (int i = 0; i < n; i++)
{
strcpy(seq[i], word[i]);
qsort(seq[i], strlen(seq[i]),sizeof(char),comp_char);
}
while (scanf("%s", str) && strcmp(str, "XXXXXX") != 0)
{
int found = 0;
qsort(str, strlen(str),sizeof(char),comp_char);
for (int i = 0; i < n; i++)
if (strcmp(str, seq[i]) == 0)
{
found = 1;
printf("%s\n", word[i]);
}
if (found == 0)
printf("NOT A VALID WORD\n");
printf("******\n");
}
return 0;
}

  qsort可以对2维数组进行排序,因为它可以调换任意大小的内存块的顺序(第三个参数指定),sort只能对一维数组或者容器进行排序,因为对其解引用时必须是一个左值。

  另一个注意点就是cmp函数比较时qsort用“-”,而sort用”>”。

sort函数要求比较函数是strict weak ordering的,否则会出现assertion error: Invalid operator<,而strict weak ordering必须满足三个条件:

1) Strict: pred (X, X) is always false.  X跟X自己比为false

2) Weak: If ! pred (X, Y) && !pred (Y, X), X==Y. 当X<Y和Y<X都不成立时,X等于Y

3)Ordering: If pred (X, Y) && pred (Y, Z), then pred (X, Z). 当X<Y,Y<Z时,X<Z成立,即排序的一个传递性。

Uva 642 - Word Amalgamation sort qsort的更多相关文章

  1. UVa 642 - Word Amalgamation

    题目:给你一个单词列表.再给你一些新的单词.输出列表中又一次排列能得到此新单词的词. 分析:字符串.对每一个字符串的字母排序生成新的传f(str).总体排序,用二分来查找就可以. 说明:注意输出要满足 ...

  2. poj1318 Word Amalgamation 字符串排序(qsort)

    Word Amalgamation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9794   Accepted: 4701 ...

  3. Word Amalgamation(枚举 + 排序)

    Word Amalgamation Time Limit: 1 Sec  Memory Limit: 64 MB Submit: 373  Solved: 247 Description In mil ...

  4. hdu-----(1113)Word Amalgamation(字符串排序)

    Word Amalgamation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others ...

  5. Word Amalgamation

    Problem Description In millions of newspapers across the United States there is a word game called J ...

  6. Word Amalgamation(hdoj1113)

    Word Amalgamation Problem Description In millions of newspapers across the United States there is a ...

  7. hdu1113 Word Amalgamation(详解--map和string的运用)

    版权声明:本文为博主原创文章.未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/35338617 转载请注明出 ...

  8. HDOJ.1113 Word Amalgamation(map)

    Word Amalgamation 点我挑战题目 点我一起学习STL-MAP 题意分析 给出字典.之后给出一系列======乱序======单词,要求你查字典,如过这个乱序单词对用有多个有序单词可以输 ...

  9. poj 1318 Word Amalgamation

    Word Amalgamation Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 9968   Accepted: 4774 ...

随机推荐

  1. Forms身份验证 知识总结

    最简单的Forms验证实现方法:FormsAuthentication.SetAuthCookie()方法,传递一个登录名即可FormsAuthentication.SignOut()方法退出Form ...

  2. LuckyStar hctf2018

    LuckyStar hctf2018 程序注册有TLS回调函数 char __stdcall TlsCallback_0(int a1, int a2, int a3) { char result; ...

  3. redis雪崩,穿透,击穿

    缓存雪崩:同一时间大量key到过期时间失效,可在设置失效时间时加随机数,如果直接修改数据库,那么一定会有不一致,通过失效时间去反复刷新缩短不一致的时间, 为了避免数据一直存在,一定要设置过期时间如果通 ...

  4. [差分][二分][贪心]luogu P3634 [APIO2012]守卫

    题面 https://www.luogu.com.cn/problem/P3634 给m个限制,可以是一段区间中必须有或者必须无忍者 最多有k个忍者,问有多少个位点一定有忍者 分析 首先用差分标记一下 ...

  5. Go 语言入门教程,共32讲,6小时(已完结)

    Go语言入门教程,共32讲,6小时(完结) 在B站:https://www.bilibili.com/video/BV1fD4y1m7TD/

  6. [LeetCode]2. 两数相加(难度:中等)

    题目: 给你两个非空的链表,表示两个非负的整数.它们每位数字都是按照逆序的方式存储的,并且每个节点只能存储一位数字.请你将两个数相加,并以相同形式返回一个表示和的链表.你可以假设除了数字0之外,这两个 ...

  7. django+x-admin管理后台模板开发管理后台案例(设计部分)

    使用django+x-admin管理后台模板搭建管理后台 一.环境需求 1.django:3.1 2.python:3.7 3.x-admin:2.2 4.pycharm:2020.3.2 5.ubu ...

  8. 201871010129-郑文潇 实验二 个人项目—《D{0-1}背包问题 》项目报告

    项目 内容 课程班级博客链接 课程链接 这个作业要求链接 [作业要求](https://www.cnblogs.com/nwnu-daizh/p/14552393.html) 我的课程学习目标 1.掌 ...

  9. 剑指offer--孩子们的游戏(圆圈中最后剩下的数字)

    每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏.其中,有个游戏是这样的:首先,让小朋友们围成一个大圈.然后,他随机指定一个数m ...

  10. Day05_25_Super关键字

    Super关键字 Super关键字的所用 Super关键字的用法有三种: 在子类的成员方法中,访问父类的成员变量. 在子类的成员方法中,访问父类的成员方法. 在子类的构造方法中,访问父类的构造方法. ...