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. P1781_宇宙总统(JAVA语言)

    //水题 题目背景 宇宙总统竞选 题目描述 地球历公元6036年,全宇宙准备竞选一个最贤能的人当总统,共有n个非凡拔尖的人竞选总统,现在票数已经统计完毕,请你算出谁能够当上总统. 输入输出格式 输入格 ...

  2. linux软件管理之yum管理操作软件包

    什么是rpm 1.1`RPM` 全称 `RedHat Package Manager` 缩写,由红帽开发用于软件包的安装.升级.卸载与查询. 1.2rpm包名组成部分 `RPM` 包命名以-将软件分成 ...

  3. ArrayList这篇就够了

    提起ArrayList,相信很多小伙伴都用过,而且还不少用.但在几年之前,我在一场面试中,面试官要求说出ArrayList的扩容机制.很显然,那个时候的我并没有关注这些,从而错过了一次机会.不过好在我 ...

  4. 图解 | 原来这就是 IO 多路复用

    为了讲多路复用,当然还是要跟风,采用鞭尸的思路,先讲讲传统的网络 IO 的弊端,用拉踩的方式捧起多路复用 IO 的优势. 为了方便理解,以下所有代码都是伪代码,知道其表达的意思即可. Let's go ...

  5. 以Aliyun体验机为例,从零搭建LNMPR环境(上)

    使用云服务器搭建 Web 运行环境,尤其是搭建常见的 LNMPR(Linux+Nginx+MySQL+PHP+Redis) 环境,对于开发人员是必备的职场基本技能之一.在这里,借着搭建我的" ...

  6. Android 之 SimpleAdapter 学习笔记

    •SimpleAdapter简介 simpleAdapter 的扩展性最好,可以定义各种各样的布局出来: 可以放上ImageView(图片),还可以放上Button(按钮),CheckBox(复选框) ...

  7. Oracle 19c Data Guard DML Redirection ADG备库上执行DML重定向(未来更好的进行读写分离)

    资料来自官方网站: https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/managing-oracle-data-g ...

  8. 1,turicreate入门 - jupyter & turicreate安装

    turicreate入门系列文章目录 1,turicreate入门 - jupyter & turicreate安装 2,turicreate入门 - 一个简单的回归模型 3,turicrea ...

  9. 数栈SQL优化案例:隐式转换

    MySQL是当下最流行的关系型数据库之一,互联网高速发展的今天,MySQL数据库在电商.金融等诸多行业的生产系统中被广泛使用. 在实际的开发运维过程中,想必大家也常常会碰到慢SQL的困扰.一条性能不好 ...

  10. docker命令快速入门

    docker快速入门系列 Docker hello world hello world $ docker run ubuntu:15.10 /bin/echo "Hello world&qu ...