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. 面试题-你听过TCP Fast Open (TFO/TCP快速打开)吗?能解释一下吗?

    TCP Fast Open (TFO/TCP快速打开) TCP快速打开(TCP Fast Open,TFO)是什么? TCP快速打开(TCP Fast Open,TFO)是对TCP的一种简化握手手续的 ...

  2. .NET 6 Preview 3 中 ASP.NET Core 的更新和改进

    原文:bit.ly/2Qb56NP 作者:Daniel Roth 译者:精致码农-王亮 .NET 6 预览版 3 现已推出,其中包括许多对新的 ASP.NET Core 改进.以下是本次预览版的新内容 ...

  3. 带你全面认识CMMI V2.0(四)——管理 赋能

    风险和机会管理(PSK)包括:识别威胁和机会:评估其发生和影响的可能性:减轻潜在威胁:利用潜在机会目的:识别,记录,分析和管理潜在的风险或机会.价值:减轻不利影响或利用积极影响来增加实现目标的可能性. ...

  4. Vue3+Vite引入Echarts5.0图表库

    1 概述 环境Vue3+Vite,需要引入ECharts库. 2 尝试 目前ECharts已更新到5.0版本,在Vue中引入并不难,npm/cnpm安装后在需要的组件中引入: import echar ...

  5. IDEA中Maven本地仓库与镜像配置

    1 Maven Maven是一个用于项目构建与管理的工具,IDEA自带了Maven,在安装目录下的 plugins\maven\lib\maven3 IDEA也可以集成使用非自带的Maven,也就是自 ...

  6. 《C++ primer》学习笔记整理

    简介 本笔记目前已包含<C++ Primer>中的绝大部分内容,但尚有部分小节有所缺漏,如 19.1.19.2 节的笔记尚未整理,会持续更新. 本项目中的学习笔记是在学完一章内容后,对其要 ...

  7. 【Mybatis源码解析】- JDBC连接数据库的原理和操作

    JDBC连接数据库的原理和操作 JDBC即Java DataBase Connectivity,java数据库连接:JDBC 提供的API可以让JAVA通过API方式访问关系型数据库,执行SQL语句, ...

  8. js弹窗的3种方式:alert、confirm、prompt

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. php变量的命名规则

    php变量的命名规则 1.变量以美元符号$开头.如$name,$age: 2.美元符号$后面的第一个字符不可以是数字: 3.除了下划线_外,变量不允许出现任何空格或者标点符号: 4.PHP变量名是区分 ...

  10. hdu4535

    题意: 吉哥系列故事--礼尚往来 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...