先输入字典中单词的个数,再输入n个单词作为字典单词。输入一个单词,查找其在字典中兄弟单词的个数再输入数字n
输出描述:
根据输入,输出查找到的兄弟单词的个数
输入例子:
3 abc bca cab abc 1输出例子:
2 bca这个题目的问题描述让人很是糊涂。正确的描述应该是这样的:输入描述:
先输入字典中单词的个数n,再输入n个单词作为字典单词。
再输入一个单词,查找其在字典中兄弟单词的个数m
再输入数字k
输出描述:
根据输入,输出查找到的兄弟单词的个数m然后输出查找到的兄弟单词的第k个单词。另外这题还有一个边界条件判断:输入的兄弟单词索引号k超过兄弟单词总数时,只输出兄弟单词的总数这题自己走的最大的弯路是:开始没有把判断兄弟单词写成函数,在对broWord和vec_words[i]进行排序比较时直接对原单词进行了操作,这样导致结果不对,应该采用中间变量缓存处理。写成函数后,排序比较变成局部变量的处理,因此不会影响到源实参。
教训:能封装成函数的就写成函数在内部处理
完整AC后的代码:
#include <iostream>#include <vector>#include <string>#include <algorithm>using namespace std;bool isBroWord(string word1,string word2){ if(word1==word2) return false; sort(word1.begin(),word1.end()); sort(word2.begin(),word2.end()); return word1==word2;}int main(){ int wordCnt; while(cin>>wordCnt){ int k; string word; vector<string> vec_words; string broWord; vector<string> vec_broWords; for(int i=0;i<wordCnt;i++){ cin>>word; vec_words.push_back(word); } //字典排序 sort(vec_words.begin(),vec_words.end()); cin>>broWord; for(int i=0;i<vec_words.size();i++){ if(isBroWord(broWord,vec_words[i])) vec_broWords.push_back(vec_words[i]); } cin>>k; cout<<vec_broWords.size()<<endl; if(vec_broWords.size()>=k)//边界判断 cout<<vec_broWords[k-1]<<endl; } return 0;}
新闻热点
疑难解答