题目描述:
兄弟单词:给定一个单词X,如果通过任意交换单词中字母的位置得到的新的单词Y,那么称X和Y是兄弟单词。注意:bca和abc是兄弟单词,abc和abc是相同单词,不是兄弟单词
这个题的出题人真是让人呵呵了
输入描述:
先输入字典中单词的个数n,再输入n个单词作为字典单词。
再输入一个单词,查找其在字典中兄弟单词的个数m
再输入数字k
3 abc bca cab abc 1
输出描述:
根据输入,输出查找到的兄弟单词的个数m
然后输出查找到的兄弟单词的第k个单词。
注意:所有输入的单词,必须按照字典排序。且当k>m时候,不输出兄弟单词。输出要用回车间隔开
2
bca
做题思路:
唯一让人提起兴趣的也就是兄弟单词的判定了。首先判断是不是相同单词,然后对每个单词内部进行类似于字典排序,那么acbd和adbc都会转变为abcd,也就是说对单词内部进行排序后判断是否相等即可。
注意:
对vector进行sort排序,那么vector内部必须有值。例如:
vector<int> a(100); //内部有一百个值
a.clear(); //内部有0个值
cin>>a[0]>>a[1]; //虽然可以调用两个值,但是a.size()是0
a.push_back(0); //因为是clear后第一次push_back,所以这个值是放在了a[0]当中
sort(a.begin(),a.end()); //也是要求里面有值,这个值必须是push_back进去的
也就是说cin的数据可以通过下标调用,但是不被vector的函数承认
AC代码:
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;
bool isBrother(string source,string word); //判断是否是兄弟单词
int main()
{
vector<string> word(1000); //放置字典单词
string source; //被查询的单词
string target; //第k个兄弟单词
int num; //字典单词总数
int k; //指定查找第k个兄弟单词
while( cin>>num ){ //cin遇到文件结束符(EOF即crtl+z就会停止输入)
word.clear();
int total=0; //记录兄弟单词的总数
for(int i=0; i<num; i++){
cin>>source;
word.push_back(source);
}
cin>>source>>k;
sort(word.begin(),word.end());//天坑,想使用sort对vector排序,那么vector内部的数据必须是push_back进去的
for(int i=0; i<num; i++){
if( isBrother(source,word[i]) ){
total++;
if( total==k ){
target = word[i]; //获取第K个单词
}
}
}
if( num!=0 ){
cout<<total<<endl;
}
if( k<=total ){
cout<<target<<endl;
}
}
return 0;
}
bool isBrother(string source,string word)
{
if( source==word ){
return false;
}
sort(source.begin(),source.end());
sort(word.begin(),word.end());
if( source==word ){
return true;
}else{
return false;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)