[蓝桥杯][算法提高]笨小猴

问题描述

Description
笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。
但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!
这种方法的具体描述如下:假设maxn是单词中出现次数最多的字母的出现次数,minn是单词中出现次数最少的字母的出现次数,如果maxn-minn是一个质数,那么笨小猴就认为这是个Lucky Word,这样的单词很可能就是正确的答案。
Input
输入文件只有一行,是一个单词,其中只可能出现小写字母,并且长度小于100。
Output
输出文件共两行:
第一行是一个字符串,假设输入的的单词是Lucky Word,那么输出“Lucky Word”,否则输出“No Answer”;
第二行是一个整数,如果输入单词是Lucky Word,输出maxn-minn的值,否则输出0。
Sample Input
error
Sample Output
Lucky Word
2

问题思路

  • 1 首先使用一个长度为26的数组将,每一个字母出现的次数记录下来
  • 2 从数组中找到最大值和最小值
  • 3 判断maxn-minn是否为质数

!! 注意事项

  • 0和1都不是质数
  • "a"和"aabb"这两种情况要特殊注意一下

完整代码

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

bool issuper(int num){
    // !!!0和1都不是质数
    if(num == 0){
        return false;
    }else if(num == 1){
        return false;
    }else{
        for(int i=2;i<num/2;i++){
            if(num%i==0){
                return false;
            }
        }
    }
    return true;
}

int main()
{
    string c;
    int len;
    int ll[26] = {0};
    int maxn=-1,minn=105;
    int judge;

    c = "aaabbb";
    cin >> c;
    len = c.length();

    // 创建一个次数表
    for(int i=0;i<len;i++){
        ll[c[i]-'a']++;
    }
    // 如果是只有一类字母的情况
    // 遍历次数表找出最大最小值
    for(int i=0;i<26;i++){
        if(ll[i]==0) continue;
        if(ll[i]>maxn){
            maxn = ll[i];
        }
        if(ll[i]<minn){
            minn = ll[i];
        }
    }
    if(len == maxn) minn=0;
    // 判断是不是质数
    bool ans = issuper(maxn-minn);
    if(!ans){
        cout << "No Answer" << endl;
        cout << 0 << endl;
    }else{
        cout << "Lucky Word" << endl;
        cout << maxn-minn << endl;
    }

    return 0;
}
发布了31 篇原创文章 · 获赞 13 · 访问量 9884

猜你喜欢

转载自blog.csdn.net/qq_43497702/article/details/103980307