题意:统计单词中出现频率最高/最低的字符,计算两者之差,判断是否为素数。
思路:建立素数表,统计。
/*
File Name :RQNOJ399.cpp
Author : erlingyier
Created Time: 2014年08月27日 星期三 18时47分05秒
*/
#include <stdio.h>
#include <string.h>
#include <set>
#include <vector>
#include <algorithm>
#include <cmath>
#include <map>
using namespace std;
const int MAXN = 105;
const int MAXM = 50;
int visit[MAXN];
int prime[MAXM];
char str[MAXN];
int scott[26];
int c = 0;//包含多少素数
int ID(char s)
{
return s - 'a';
}
void sieve(int n)
{
memset(visit, 0, sizeof(visit));
int m = (int)sqrt(n + 0.5);
for(int i = 2; i <= m; i++)
if(!visit[i])
for(int j = i*i; j < n; j+=i)
visit[j] = 1;
}
void genprime(int n)
{
sieve(n);
for(int i = 2; i <= n; i++)
if(!visit[i])
prime[c++] = i;
}
int judge(int a)
{
for(int i = 0; i < c; i++)
if(a==prime[i])
return 1;
return 0;
}
int main( int argc, const char* argv[] )
{
genprime(MAXN);
while(scanf("%s",str)==1)
{
memset(scott, 0, sizeof(scott));
int n = strlen(str);
for(int i = 0; i < n; i++)
scott[ID(str[i])]++;
int max = 0;
int min = MAXN;
for(int i = 0; i < 26; i++)
if(scott[i])
{
max = max > scott[i] ? max : scott[i];
min = min < scott[i] ? min : scott[i];
}
if(judge(max - min))
printf("Lucky Word\n%d\n",max - min);
else
printf("No Answer\n0\n",);
}
return 0;
}