R7-11 h0096. 单词合并 (10 分)
在美国的很多报纸上,有一种单词游戏 Jumble 。这一游戏的目的是解字谜,为了找到答案中的字母,就要整理 4 个单词。请您编写一个整理单词的程序。
输入格式:
输入包含 4 个部分:
1 )字典,包含至少 1 个至多 100 个的单词,每个单 词一行;
2 )一行内容为 XXXXXX ,表示字典结束;
3 )一个或多个你要整理的 “ 单词 ” ;
4 )一行内容为 XXXXXX ,表示文件的结束。所有的单词, 无论是字典单词还是要整理的单词,都是小写英文字母,至少 1 个字母,至多 6 个字母( XXXXXX 是由大写的 X 组成),字典中单词不排序,但每个单词只出现一次。
输出格式:
对于输入中每个要整理的单词,输出在字典里存在的单词,单词的字母排列可以不同,如果在字典中找到不止一个单词对应时要把他们按字典序进行排序。每个单词占一行。如果没找到相对应的单词则输出NOT A VALID WORD ,每输出对应的一组单词或 NOT A VALID WORD 后要输出****** 。
输入样例:
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<bits/stdc++.h> using namespace std; int main(){ map<string,int>mp; vector<string>v; string s; int cnt=0; while(cin>>s){ if(s=="XXXXXX")cnt++; else{ if(cnt==0) mp[s]=1; else if(cnt==1) v.push_back(s); } } for(int i=0;i<v.size();i++){ int f=0; while(next_permutation(v[i].begin(),v[i].end())){ if(mp[v[i]]==1) cout<<v[i]<<endl,f=1; } if(!f)cout<<"NOT A VALID WORD\n******\n"; else cout<<"******"<<endl; } return 0; }