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)的更多相关文章

  1. UVA 10474 (13.08.04)

     Where is the Marble?  Raju and Meena love to play with Marbles. They have got a lotof marbles with ...

  2. UVA 10194 (13.08.05)

    :W Problem A: Football (aka Soccer)  The Problem Football the most popular sport in the world (ameri ...

  3. UVA 253 (13.08.06)

     Cube painting  We have a machine for painting cubes. It is supplied withthree different colors: blu ...

  4. 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 ...

  5. 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 ...

  6. UVA 10499 (13.08.06)

    Problem H The Land of Justice Input: standard input Output: standard output Time Limit: 4 seconds In ...

  7. UVA 10025 (13.08.06)

     The ? 1 ? 2 ? ... ? n = k problem  Theproblem Given the following formula, one can set operators '+ ...

  8. UVA 465 (13.08.02)

     Overflow  Write a program that reads an expression consisting of twonon-negative integer and an ope ...

  9. UVA 10494 (13.08.02)

    点此连接到UVA10494 思路: 采取一种, 边取余边取整的方法, 让这题变的简单许多~ AC代码: #include<stdio.h> #include<string.h> ...

随机推荐

  1. String 与不可变对象

    什么是不可变对象 ?不可变对象指的是在创建一个对象之后 ,不能再改变它的状态 ,那么这个对象就是不可变的 .不能改变状态的意思是 ,不能改变对象内的成员变量 ,包括基本数据类型的值不能改变 ,引用类型 ...

  2. iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面

    iOS 11开发教程(六)iOS11Main.storyboard文件编辑界面 在1.2.2小节中提到过编辑界面(Interface builder),编辑界面是用来设计用户界面的,单击打开Main. ...

  3. Linux下使用thrfit

    1.安装boost.thrfit 2.生成gen-cpp 3.编译其中的server,方法为: (1).直接使用g++编译 g++ -o server HelloWorld.cpp helloworl ...

  4. Cpp下匿名对象探究

    先来看看一段代码: #include "iostream" using namespace std; class ABCD { public: ABCD(int a, int b, ...

  5. centOS7下SVN的安装和使用

    1. 安装 CentOS通过yum安装subversion. # yum install subversion  subversion安装在/bin目录: # which svnserve #查看目录 ...

  6. linux文件删除,剩余空间没变化

    centOS6.6,删除了一个13G的文件,但是使用df -h 查看,剩余空间没变化这个文件夹查看 du -h查看发现空间已经变少了.原因可能是删除文件时有进程在使用文件,导致空间未释放.yum in ...

  7. PHP5.3以上版本使用pthreads PHP扩展真正支持多线程

    class test_thread_run extends Thread{public $url;public $data; public function __construct($url){$th ...

  8. [CC-CHEFINV]Chef and Swaps

    [CC-CHEFINV]Chef and Swaps 题目大意: 长度为\(n(n\le2\times10^5)\)的数列,\(q(q\le2\times10^5)\)次询问,每次问交换\(A_x\) ...

  9. 【10.26校内测试】【状压?DP】【最小生成树?搜索?】

    Solution 据说正解DP30行??? 然后写了100行的状压DP?? 疯狂特判,一算极限时间复杂度过不了aaa!! 然而还是过了....QAQ 所以我定的状态是待转移的位置的前三位,用6位二进制 ...

  10. bzoj 1563

    对于很多决策单调性DP问题,我们很难(但不是不可以)证明其决策满足单调性,所以感觉很像时,可以打表看是否满足. 这道题的精度(?范围)很难搞,开始生怕溢出,看了hzwer的代码,才发现用long do ...