一.题目解析
输入一个字符串作为一个单词,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; }