Uva 642 - Word Amalgamation sort qsort
| 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的更多相关文章
- UVa 642 - Word Amalgamation
题目:给你一个单词列表.再给你一些新的单词.输出列表中又一次排列能得到此新单词的词. 分析:字符串.对每一个字符串的字母排序生成新的传f(str).总体排序,用二分来查找就可以. 说明:注意输出要满足 ...
- poj1318 Word Amalgamation 字符串排序(qsort)
Word Amalgamation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9794 Accepted: 4701 ...
- Word Amalgamation(枚举 + 排序)
Word Amalgamation Time Limit: 1 Sec Memory Limit: 64 MB Submit: 373 Solved: 247 Description In mil ...
- hdu-----(1113)Word Amalgamation(字符串排序)
Word Amalgamation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Word Amalgamation
Problem Description In millions of newspapers across the United States there is a word game called J ...
- Word Amalgamation(hdoj1113)
Word Amalgamation Problem Description In millions of newspapers across the United States there is a ...
- hdu1113 Word Amalgamation(详解--map和string的运用)
版权声明:本文为博主原创文章.未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/35338617 转载请注明出 ...
- HDOJ.1113 Word Amalgamation(map)
Word Amalgamation 点我挑战题目 点我一起学习STL-MAP 题意分析 给出字典.之后给出一系列======乱序======单词,要求你查字典,如过这个乱序单词对用有多个有序单词可以输 ...
- poj 1318 Word Amalgamation
Word Amalgamation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 9968 Accepted: 4774 ...
随机推荐
- 【FreeRTOS】cpu利用率统计
目录 前言 概念 作用 必看点 实现 添加几个宏定义 源码 FreeRTOS STM32 定时器 简要说明 前言 本笔记基于 stm32+FreeRTOS. 主要参考野火.安富莱. 概念 简单概要: ...
- JAVA使用SizeOf
研究一下JAVA的SizeOf 引用外部类实现JAVA的SizeOf JAVA本身是没有SizeOf的,因此我们需要去MavenRepository中下载JAR包(也可以使用maven等),因为这里只 ...
- Android学习之异步消息处理机制
•前言 我们在开发 APP 的过程中,经常需要更新 UI: 但是 Android 的 UI 线程是不安全的: 如果想更新 UI 线程,必须在进程的主线程中: 这里我们引用了异步消息处理机制来解决之一问 ...
- Codeforces-121C(逆康托展开)
题目大意: 给你两个数n,k求n的全排列的第k小,有多少满足如下条件的数: 首先定义一个幸运数字:只由4和7构成 对于排列p[i]满足i和p[i]都是幸运数字 思路: 对于n,k<=1e9 一眼 ...
- leetcode 刷题(数组篇)4题 寻找两个正序数组的中位数(二分查找)
题目描述 给定两个大小分别为 m 和 n 的正序(从小到大)数组 nums1 和 nums2.请你找出并返回这两个正序数组的 中位数 . 示例 1: 输入:nums1 = [1,3], nums2 = ...
- Qt开发技术:图形视图框架(一)基本介绍
前话 使用到Qt的视图框架. Qt视图框架介绍 简介 图形视图框架(The Graphic View Framework)用于管理和与大量定制的二维图形项目交互,以及用于可视化项目的视图小 ...
- 『Spring Boot 2.4新特性』减少95%内存占用
节省 95%的内存占用,减少 80%的启动耗时. GraalVM 是一种高性能的虚拟机,它可以显著的提高程序的性能和运行效率,非常适合微服务.最近比较火的 Java 框架 Quarkus 默认支持 G ...
- Druid 监控分布式解决方案
什么是 Druid Monitor Druid 是一个非常强大的数据库连接池,但是它的强大并不仅仅体现在作为一个高性能连接池加快数据访问上和连接管理上,它内置了一个强大的监控工具:Druid Moni ...
- FastDFS一步步搭建存储服务器
一:FastDFS简介 1:FastDFS简介 FastDFS是一个开源的轻量级分布式文件系统,功能包括:文件存储.文件同步.文件访问(文件上传.文件下载)等,解决了大容量存储和负载均衡的问题.特别适 ...
- 死磕Spring之AOP篇 - Spring AOP自动代理(三)创建代理对象
该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读. Spring 版本:5.1 ...