第1关:Word Amalgamation(中文版)
题目描述
在美国数百万份报纸上都有一种叫做 Jumble 的文字游戏。这个游戏的目的是解决一个谜语,但为了找到出现在答案中的字母,有必要解读四个单词。你的任务是写一个可以解读文字的程序。
输入格式
输入包含四个部分:
- 词典,每行一个,字数不超过 100 个;
- 包含 XXXXXX 的行,表示字典的结束;
- 你必须整理的一个或多个杂乱的“单词”,每个单词单独在一行上;
- 另一行包含 XXXXXX,它表示文件的结束。
所有单词,包括字典单词和乱序单词,都只由小写英文字母组成,并且长度至少为一个,最多为六个字符。(注意,XXXXXX 包含大写。)字典不一定是按顺序排列的,但是字典里的每个单词都是唯一的。
输出格式
对于输入中的每个打乱的单词,输出一个字典中所有单词的字母顺序列表,这些单词可以通过重新排列打乱的单词中的字母来形成。这个列表中的每个单词必须单独出现在一行上。如果列表是空的(因为没有字典单词可以形成),输出行 NOT A VALID WORD
代替。在这两种情况下,输出包含 6 个星号的行来表示列表的结束。
输入输出样例
输入
tarp
given
score
refund
only
trap
work
earn
course
pepper
part
XXXXXX
resco
nfudre
aptr
sett
oresuc
XXXXXX
输出
score
******
refund
******
part
tarp
trap
******
NOT A VALID WORD
******
course
******
最后通关代码:
#include <cstdio>
#include <cstring>
#include <string>
#include <iostream>
#include <algorithm>
#include <stdlib.h>
#include <cmath>
using namespace std;
struct node
{
string a;
string b;
}x[120];
bool cmp(node a,node b)
{
return a.a<b.a;
}
int main()
{
string s,t;
int d=0;
while(cin >> s)
{
if( s == "XXXXXX")
{
break;
}
x[d].a=s;
sort(s.begin(),s.end());
x[d++].b=s;
}
sort(x,x+d,cmp);
while(cin >> s)
{
if( s == "XXXXXX")
{
break;
}
int flag = 0;
sort(s.begin(),s.end());
for(int i = 0;i < d;i++)
{
if(x[i].b==s)
{
cout<<x[i].a<<endl;
flag=1;
}
}
if(flag == 0)
cout << "NOT A VALID WORD"<<endl;
cout << "******"<<endl;
}
return 0;
}