P1125 笨小猴 题解
难度:⭐⭐⭐
知识点:暴力
题目链接
序言:
以前没过审的一篇博客,再写一遍吧,留作纪念
1. 入手程序
这句话是我们入手的关键↓
一个单词,其中只可能出现小写字母,并且长度小于100
这说明数据很小,小到可以..
暴力模拟
2. 编程思路
- 读入
- 通过ASCLL码记录每个字母出现个数。
- 寻找出现次数最多的字母的出现个数
- 寻找出现次数最少的字母的出现个数
- 判断加输出
注意
- 质数的特判
本题中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;
}