UVA 156 (13.08.04)
Ananagrams |
Most crossword puzzle fans are used to anagrams--groupsof words with the same letters in different orders--for exampleOPTS, SPOT, STOP, POTS and POST. Some words however do not have thisattribute, no matter how you rearrange their letters, you cannot formanother word. Such words are called ananagrams, an example isQUIZ.
Obviously such definitions depend on the domain within which we areworking; you might think that ATHENE is an ananagram, whereas anychemist would quickly produce ETHANE. One possible domain would be theentire English language, but this could lead to some problems. Onecould restrict the domain to, say, Music, in which case SCALE becomesa relative ananagram (LACES is not in the same domain) but NOTEis not since it can produce TONE.
Write a program that will read in the dictionary of a restricteddomain and determine the relative ananagrams. Note that single letterwords are, ipso facto, relative ananagrams since they cannot be``rearranged'' at all. The dictionary will contain no morethan 1000 words.
Input
Input will consist of a series of lines. No line will be more than 80characters long, but may contain any number of words. Words consist ofup to 20 upper and/or lower case letters, and will not be brokenacross lines. Spaces may appear freely around words, and at least onespace separates multiple words on the same line. Note that words thatcontain the same letters but of differing case are considered to beanagrams of each other, thus tIeD and EdiT are anagrams. The file willbe terminated by a line consisting of a single #.
Output
Output will consist of a series of lines. Each line will consist of asingle word that is a relative ananagram in the input dictionary.Words must be output in lexicographic (case-sensitive) order. Therewill always be at least one relative ananagram.
Sample input
- ladder came tape soon leader acme RIDE lone Dreis peat
- ScAlE orb eye Rides dealer NotE derail LaCeS drIed
- noel dire Disk mace Rob dries
- #
Sample output
- Disk
- NotE
- derail
- drIed
- eye
- ladder
- soon
题意: 在一堆单词里, 找出那些没有字母调换顺序的单词
如acme, 在这堆词里还出现了came, 后者是因前者字母调换顺序得到, 故不用输出
而Disk就没有, 所以输出
另外注意: 不区分大小写;
做法:
首先, 我们可以想到, 只要两个单词可以通过调换字母顺序得到对方, 那么组成他们的字母是一样的, 这是第一步思路;
接着, 输出是要把单词按字典序输出, 故一开始输入完成后先qsort一下, 再用word数组, 把处理成小写后的单词储存下来;
然后, 我们把每个单词中的字母排成最小字典序;
最后,通过word字符数组进行搜索, 已排成字典序的单词若只出现一次, 就输出一开始未转化成小写的原始单词~
AC代码:
- #include<stdio.h>
- #include<string.h>
- #include<stdlib.h>
- char str[125][25];
- char word[125][25];
- int cmp_str(const void *_a, const void *_b) {
- char *a = (char*)_a;
- char *b = (char*)_b;
- return strcmp(a,b);
- }
- int cmp_char(const void *_a, const void *_b) {
- char *a = (char*)_a;
- char *b = (char*)_b;
- return *a - *b;
- }
- int main() {
- char tmp[25];
- int num = 0;
- //输入:
- while(scanf("%s", tmp), tmp[0] != '#')
- strcpy(str[num++], tmp);
- //将字符串按字典序排:
- qsort(str, num, sizeof(str[0]), cmp_str);
- //全部处理成小写, 且其中的字符排成字典序, 放到word数组:
- for(int i = 0; i < num; i++) {
- int len = strlen(str[i]);
- for(int j = 0; j < len; j++) {
- if(str[i][j] >= 'A' && str[i][j] <= 'Z')
- word[i][j] = str[i][j] + ('a' - 'A');
- else
- word[i][j] = str[i][j];
- }
- word[i][len] = '\0';
- qsort(word[i], len, sizeof(char), cmp_char);
- }
- //判断是否出现, 不出现
- for(int i = 0; i < num; i++) {
- int count = 0;
- for(int j = 0; j < num; j++) {
- if(!strcmp(word[i], word[j]))
- count++;
- }
- if(count == 1)
- puts(str[i]);
- }
- return 0;
- }
UVA 156 (13.08.04)的更多相关文章
- UVA 10474 (13.08.04)
Where is the Marble? Raju and Meena love to play with Marbles. They have got a lotof marbles with ...
- UVA 10194 (13.08.05)
:W Problem A: Football (aka Soccer) The Problem Football the most popular sport in the world (ameri ...
- UVA 253 (13.08.06)
Cube painting We have a machine for painting cubes. It is supplied withthree different colors: blu ...
- UVA 10790 (13.08.06)
How Many Points of Intersection? We have two rows. There are a dots on the toprow andb dots on the ...
- UVA 573 (13.08.06)
The Snail A snail is at the bottom of a 6-foot well and wants to climb to the top.The snail can cl ...
- UVA 10499 (13.08.06)
Problem H The Land of Justice Input: standard input Output: standard output Time Limit: 4 seconds In ...
- UVA 10025 (13.08.06)
The ? 1 ? 2 ? ... ? n = k problem Theproblem Given the following formula, one can set operators '+ ...
- UVA 465 (13.08.02)
Overflow Write a program that reads an expression consisting of twonon-negative integer and an ope ...
- UVA 10494 (13.08.02)
点此连接到UVA10494 思路: 采取一种, 边取余边取整的方法, 让这题变的简单许多~ AC代码: #include<stdio.h> #include<string.h> ...
随机推荐
- MySQL性能优化(七·下)-- 锁机制 之 行锁
一.行锁概念及特点 1.概念:给单独的一行记录加锁,主要应用于innodb表存储引擎 2.特点:在innodb存储引擎中应用比较多,支持事务.开销大.加锁慢:会出现死锁:锁的粒度小,并发情况下,产生锁 ...
- 【基础知识】.Net基础加强 第二天
第02天 .Net基础加强 1. 封装 1> 属性的封装: 属性封装字段:把变化封装一下,保留用户的使用方式 2> 把方法的多个参数封装成一个对象 3> 将一堆代码封装到一个方法中 ...
- iOS Sprite Kit教程之场景的切换
iOS Sprite Kit教程之场景的切换 Sprite Kit中切换场景 每一个场景都不是单独存在的.玩家可以从一个场景中切换到另外一个场景中.本小节,我们来讲解场景切换.在每一个游戏中都会使用到 ...
- PHP 快速排序算法详解
备注:下面转载的快速排序算法有bug,数组中重复值会被删除,修改后如下: function quickSort($arr){ //递归出口 if(!isset($arr[1])){ return $a ...
- ZOJ 1940 Dungeon Master 三维BFS
Dungeon Master Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Desc ...
- C#高级编程9-第6章 数组
数组 1.同一类型和不同类型的多个对象 需要使用同一类型的多个对象则使用集合和数组. Array类为数组元素排序和过滤提供了多个方法,使用枚举器,可以迭代数组所有元素. 2.简单数组 数组的声明 因为 ...
- service redis does not support chkconfig 的解决办法
问题解决办法如下: 必须把下面两行注释放在/etc/init.d/redis文件靠前的注释中(加入以下注释): # chkconfig: # description: Redis is a persi ...
- 强烈推荐:Android史上最强大的自定义任务软件Tasker
强烈推荐:Android史上最强大的自定义任务软件Taskerhttp://bbs.mumayi.com/thread-28387-1-1.html(出处: 木蚂蚁手机乐园) Android上的Tas ...
- datagrid在MVC中的运用06-固定连续列
本文主要体验datagrid的frozenColumns属性. □ frozenColumns效果: 在frozenColumns的列将保持不动,而其他列横向滚动. □ frozenColumns效果 ...
- Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件:
Http请求之基于HttpUrlConnection,支持Header,Body传值,支持Multipart上传文件: public static String post(String actionU ...