CF452A.Eevee 第一条题解
2026-04-04 22:32:53
发布于:浙江
刚上线就看到了这条帖子,那肯定得开始干了。
作为一名"核"格的宝可梦玩家,那必定是要完成这道题(其实早就写好了代码结果当时CF平台用不了)
那么废话说完直接上思路~
首先是我的人机 人工翻译:
题目描述
你正在解决来自IPSC2014的字谜K游戏。你解决了所有的谜,除了这个:伊布会进化成谁?你并不是特别了解宝可梦,但是谷歌的快速搜索帮助你发现伊布可以进化成8种不同的宝可梦:水伊布,雷伊布,火伊布,太阳伊布,月亮伊布,叶伊布,冰伊布,以及仙子伊布。
你知道谜底的长度,并且你已经知道了一些字母。字谜的设计者保证了每个答案都是唯一的,所以你可以确切地找出伊布的八种进化形态中名称长度与名称内容都符合所给内容的一种。你的任务是找出它。
输入格式
第一行输入包含一个整数n(6<=n<=8)-名称的长度
下一行包含一个有n个字符的字符串,每一个字符都是一个小写字母(代表已知名称内的字母)或者一个句点(代表名称内未知的字母)
输出格式
输出一个可以匹配上【输入】中的伊布的进化型名称,只用小写字母输出(在输出中\不确定是不是这么翻译\不要将首字母大写)
OK,翻译完毕后再看八种伊布进化型的名称(英文),我们可以知道,只有“vaporeon”的长度是8,只有“espeon”的长度是6,其余都是7,所以可以先对n进行判断。
下一步,若n==7,则进行进一步的判断。我们可以先创建一个字符串s,用于存储输入的谜面。然后,再将输入的谜面与每一只伊布的名称进行逐个字母比对。由于题目保证有唯一解,所以just do it 可以将‘.’看作已经匹配好的字符,而确切给出的字符则要与当前对比位上吻合才行。
这么说好像还是有些模糊,那让我们根据代码注释来看看>w<
#include<iostream>
#include<string>
using namespace std;
string s[6]={"jolteon","flareon","umbreon","leafeon","glaceon","sylveon"};//用于循环逐个对比(只要长度为7的)
bool a[7];//用于储存每一位是否是未给出的字母
int main(){
int n;
cin>>n;
if(n==6)cout<<"espeon";
else if(n==8)cout<<"vaporeon";//特殊判断
else{
string t;
cin>>t;//储存谜面
for(int i=0;i<7;i++){
if(t[i]!='.')a[i]=true;
}
for(int i=0;i<6;i++){//挨个判断每一种进化型
bool pokemon=true;
for(int j=0;j<7;j++){
if(a[j]){
if(s[i][j]!=t[j]){
pokemon=false;
break;
}
}
}
if(pokemon)cout<<s[i]<<endl;
}
}
return 0;
}
当然,这里的程序还可以进一步简化,直接一遍嵌套循环结束
还有最重要的一点,不要输出时打错!不然你猜为什么第一个提交是错误的…… jolteon 打成 jolten 了……
这里空空如也








有帮助,赞一个