题目:http://poj.org/problem?id=1035
AC代码(C++):
#include <iostream>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <queue>
#include <math.h>
#include <string>
using namespace std;
int main(){
vector<string> dic;
for(;;){
string word;
cin>>word;
if(word.at(0)=='#')break;
dic.push_back(word);
}
for(;;){
string word;
cin>>word;
if(word.at(0)=='#')break;
vector<string> rs;
bool flag = false;
for(vector<string>::iterator it = dic.begin(); it != dic.end(); it++){
if(word.length()==it->length()){
int cnt = 0;
for(int i = 0; i < word.length(); i++){
if(it->at(i)!=word.at(i))cnt++;
}
if(cnt==0){
cout<<word<<" is correct\n";
flag = true;
}
else if(cnt==1){
rs.push_back(*it);
}
}
else if(word.length()-it->length()==1){
for(int i = 0; i < it->length(); i++){
if(it->at(i)!=word.at(i)){
string tmp = word;
tmp.erase(i,1);
if(tmp.compare(*it)==0){
rs.push_back(*it);
break;
}
break;
}
if(i+1==it->length()){
rs.push_back(*it);
break;
}
}
}
else if(it->length()-word.length()==1){
for(int i = 0; i < word.length(); i++){
if(it->at(i)!=word.at(i)){
string tmp = *it;
tmp.erase(i,1);
if(tmp.compare(word)==0){
rs.push_back(*it);
break;
}
break;
}
if(i+1==word.length()){
rs.push_back(*it);
break;
}
}
}
}
if(!flag){
cout<<word<<": ";
for(vector<string>::iterator it = rs.begin(); it != rs.end(); it++){
cout<<*it;
if(it+1!=rs.end())cout<<' ';
}
cout<<endl;
}
}
}
总结:水题, 分3种情况, 其实是2种, 字符多一个和少一个其实是一样的, 换一下判断就行.