【題解】Luogu P1125 【笨小猴】

给出一种半(maybe更少)面向对象的写法,这种写法的好处就是灰常好写,是以人为中心的而不是以算法(顺便提一下几乎所有老师都说面向对象在竞赛中用不到,但实际上却很有用,虽然不用也可以,只是对于我这种Java转行的人来说很麻烦),跑题了 咳咳(听说ACM可用Java提交诶)再次跑题233

此题如下坑点:

  1. 题干中所述min是出现次数最少的词,那么意味着首先得出现,min才有意义(这告诉我们语文or审题or严谨态度的重要性)

  2. 忘了

伪码(《head first java》告诉我们,想写程序先得写出(or想出)程序的伪码,然后是测试码,最后是真实码,也就是说看到题也别急先写)

数据结构:

用一个名叫Word的类,来储存字母的出现次数和该字母是否出现,即开一个Word w[26]。

算法:

判断质数

类排序(类似于结构体排序)

逻辑:

读入
统计字母出现次数

排序
取最大(小)次数

判断输出即可

您的点赞和评论是咱前进的动力qwq(商界互吹)

qwq管理员求通过了(再不过就被连拒n片题解了)

    #include<cstdio>
    #include<cmath>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    class Word{
    public:
        int cnt;
        bool isAppear;
    };
    Word w[26];
    bool compare(Word w1,Word w2){
        return w1.cnt > w2.cnt;
    }
    bool isPrime(int n){
        int sqr = sqrt(n * 1.0);
        if(n <= 1){
            return false;
        }
        for(int i = 2;i < sqr;i++){
            if(n % i == 0){
                return false;
            }
        }
        return true;
    }
    int main(){
        char word[101];
        scanf("%s",word);
        char c = 'a';
        for(int i = 0;i < 26;i++){
            for(int j = 0;j < strlen(word);j++){
                if(c == word[j]){
                    w[i].isAppear = true;
                    w[i].cnt++;
                }
            }
            c++;
        }
        sort(w,w + 26,compare);
        int max = 0,min = 9999;
        max = w[0].cnt;
        for(int i = 0;i < 26;i++){
            if(w[i].isAppear){
                min = w[i].cnt;
            }
        }
        if(isPrime(max - min)){
            printf("Lucky Word\n");
            printf("%d",max - min);
        }else{
            printf("No Answer\n");
            printf("0\n");
        }
        return 0;
}