P1125 笨小猴 题解

难度:⭐⭐⭐
知识点:暴力
题目链接

序言:

以前没过审的一篇博客,再写一遍吧,留作纪念

1. 入手程序

这句话是我们入手的关键↓

一个单词,其中只可能出现小写字母,并且长度小于100

这说明数据很小,小到可以..

暴力模拟

2. 编程思路

  1. 读入
  2. 通过ASCLL码记录每个字母出现个数。
  3. 寻找出现次数最多的字母的出现个数
  4. 寻找出现次数最少的字母的出现个数
  5. 判断加输出

注意

  • 质数的特判
    本题中maxn-minn可能等于0或1!(感谢样例二)
	if(x==0 || x==1)
	{
		return 0;
	}
  • 寻找出现次数最少的字母时的特判
    不是所有字母都一定要出现在一个单词里!所以次数可能是0!
	if(z[i]<small && z[i]!=0)
	{
		small=z[i];
	}

3. AC代码

#include<bits/stdc++.h>
using namespace std;
string s;//读入的单词
int z[30];//记录每个字母出现了多少次。
int sf(int x)//判断质数,不多解释
{
    if(x==0 || x==1)
    {
        return 0;
    }
    for(int i=2;i<=sqrt(x);i++)
    {
        if(x%i==0)
        {
            return 0;
        }
    }
    return 1;
}
int main()
{
    cin>>s; //读入
    int l=s.size();
    for(int i=0;i<l;i++) //通过ASCLL码记录每个字母出现个数。
    {
        z[int(char(s[i]))-96]++;
    }
    int big=0;
    for(int i=1;i<=26;i++)//寻找出现次数最多的字 母的出现个数
    {
        if(z[i]>big)
        {
            big=z[i];
        }
    }
    int small=101;
    for(int i=1;i<=26;i++)//寻找出现次数最少的字母的出现个数
    {
        if(z[i]<small && z[i]!=0)
        {
            small=z[i];
        }
    }
    if(sf(big-small)==1)//判断输出
    {
        cout<<"Lucky Word"<<endl<<big-small;
    }
    else{
        cout<<"No Answer"<<endl<<"0";
    }
    return 0;
}

我是千文杜博,记住我呦~~

The end