目的:按照排名给奖品。
输入:
N 人数
输出:
和人的排位有关,输入他的奖品
第一名,是否质数,其他三类奖品。
算法:
用unordered_map,存名字和排名,然后计算是否为质数
#include<stdio.h>
#include<algorithm>
#include<math.h>
using namespace std;
const int inf = 1000000000;
const int maxn = 10010;
int hash1[maxn] = {0};
bool isprime(int x)
{
int sqr = (int)sqrt(1.0*x);
for(int i=2;i<=sqr;i++)
{
if(x%i==0)
{
return false;
}
}
return true;
}
int main()
{
int N;
scanf("%d",&N);
int id;
for(int i=0;i<N;i++)
{
scanf("%d",&id);
hash1[id] = i+1;
}
int M,q;
scanf("%d",&M);
for(int i=0;i<M;i++)
{
scanf("%d",&q);
if(hash1[q]==0)
{
printf("%04d: Are you kidding?\n",q);
}else if(hash1[q]==inf)
{
printf("%04d: Checked\n",q);
}else
{
if(hash1[q]==1)
{
printf("%04d: Mystery Award\n",q);
}else if(isprime(hash1[q]))
{
printf("%04d: Minion\n",q);
}else
{
printf("%04d: Chocolate\n",q);
}
hash1[q] = inf;
}
}
return 0;
}
反思:数和数的编号别弄混了。有时候用的这个数下标所指单元的值。