1059 C语言竞赛 (20 分)
思路:使用map建立一个string->int的容器。然后存入它所对应的编号,最后再根据他的id查找对应的名次就可以判断出来。
我这里是这样区分三种:已查的话名次变为-1,未查的话名次肯定是大于等于0的,然后不符合的就应该是0(因为没有给它赋值)。我觉得我写的很容易理解,直接看代码吧,代码如下:
using namespace std;
int ss(int x)
{
if(x>=2)
{
for(int i=2;i<=sqrt(x);i++)
if(!(x%i))
return 0;
return 1;
}
return 0;
}
int main()
{
string id;
int n,k;
cin>>n;
map<string,int>m;
for(int i=1;i<=n;i++)
{
cin>>id;
m[id]=i;
}
cin>>k;
while(k--)
{
cin>>id;
if(m[id]&&m[id]!=-1)
{
if(m[id]==1)
{
cout<<id<<": Mystery Award"<<endl;
m[id]=-1;
}
else if(ss(m[id]))
{
cout<<id<<": Minion"<<endl;
m[id]=-1;
}
else
{
cout<<id<<": Chocolate"<<endl;
m[id]=-1;
}
}
else if(!m[id])
cout<<id<<": Are you kidding?"<<endl;
else
cout<<id<<": Checked"<<endl;
}
}