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. 电影AI修复,让重温经典有了新的可能

    摘要:有没有一种呈现,不以追求商业为第一目的,不用花大价钱,不用翻拍,没有画蛇添足,低成本的可共赏的让经典更清晰? 本文分享自华为云社区<除了重映和翻拍,重温经典的第三种可能>,原文作者: ...

  2. js数组reduce解析及使用示例

    reduce() 简单说,reduce()可以对数组中的每个元素执行一个由您提供的reducer函数(升序执行),函数的返回值分配给累计器,该返回值在数组的每个迭代中被记住,并最后将其结果汇总为单个返 ...

  3. Elasticsearch 集群优化-尽可能全面详细

    Elasticsearch 集群优化-转载参考1 基本配置 基本配置,5台配置为 24C 125G 17T 的主机,每台主机上搭建了一个elasticsearch节点. 采用的elasticsearc ...

  4. 小白都能学会的Java注解与反射机制

    前言 Java注解和反射是很基础的Java知识了,为何还要讲它呢?因为我在面试应聘者的过程中,发现不少面试者很少使用过注解和反射,甚至有人只能说出@Override这一个注解.我建议大家还是尽量能在开 ...

  5. HTML(〇):简介导读

    网页 什么是网页 网站(Website):是指在因特网上根据一定的规则,使用HTML(标准通用标记语言)等工具制作的用于展示特定内容相关网页的集合. 网页(webpage):是网站中的一页,通常是HT ...

  6. Unity 背包系统的完整实现(基于MVC框架思想)

    前言: 项目源码上传GitHub:Unity-knapsack 背包系统: 背包系统是游戏中非常重要的元素,几乎每一款游戏都有背包系统,我们使用背包系统可以完成装备栏的数据管理,商店物体的数据管理等等 ...

  7. Postman 使用小技巧/指南

    一.什么是 Postman(前世今生) Postman 诞生于 2013 年,一开始只是 Abhinav Asthana 着手于解决 API 测试的工具,随着这个工具的使用者和需求迅速激增,Abhin ...

  8. FastDFS一步步搭建存储服务器

    一:FastDFS简介 1:FastDFS简介 FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适 ...

  9. Horovod Install

    Horovod documentation 安装 [Step1]安装Open MPI 注意: Open MPI 3.1.3 安装有些问题, 可以安装 Open MPI 3.1.2 或者 Open MP ...

  10. 实现Web请求后端Api的Demo,实现是通过JQuery的AJAX实现后端请求,以及对请求到的数据的解析处理,实现登录功能

    本篇实现Web请求后端Api的Demo,实现是通过JQuery的AJAX实现后端请求,以及对请求到的数据的解析处理,实现登录功能需求描述:1. 请求后端Api接口地址2. 根据返回信息进行判断处理前端 ...