一.题目解析

输入一个字符串作为一个单词,maxn记录单词中出现次数最多的单词的次数,minn记录最少的。如果maxn-minn为质数,则输出Lucky Wrod,以及maxn-minn的值,反之输出No Answer和0.

题目还是很简单的,而且输入的字母都是小写的英文字母。

所以我们的思路就是通过哈希表记录单词中每个字母出现的次数,找出manx和minn,然后通过数学方法,判断结果是否为质数。

二.算法原理

因为单词都是小写字母组成的,所以我们可以通过一个大小为26的数组来模拟数组。

接着就是找出maxn和minn,因为这两个都代表的是字母的出现次数,所以不可能为0。我们在找的时候,只有当字母次数不为0,才尝试更新。

最后一步,判断是否是质数。质数就是只能被1和它本身整除。我们从2开始,一直到x-1,只要其中有一个可以被x整除,则返回false,反之返回true。因为2是最小的质数,所以当x<2时,直接返回false。

#include <string>
#include <climits>
#include <iostream>
using namespace std;

bool isZhishu(int x)
{
   if (x < 2) return false;
   for (int i = 2; i <= x - 1; ++i) if (x % i == 0) return false;
   return true;
}

int  main()
{
   string word;
   cin >> word;

   int dict[26] = { 0 };
   for (auto e : word)
   {
       dict[e - 'a']++;
   }

   int maxn = -1;
   int minn = INT_MAX;
   int i = 0;
   for (i = 0; i < 26; ++i)
   {
        if(dict[i])
        {
            maxn = max(maxn,dict[i]);
            minn = min(minn,dict[i]);
        }
   }

   if (isZhishu(maxn - minn))
   {
       cout << "Lucky Word" << endl;
       cout << maxn - minn << endl;
   }
   else
   {
       cout << "No Answer" << endl;
       cout << 0 << endl;
   }

   return 0;
}