题解,详细注释与AC代码
2026-06-06 12:32:26
发布于:浙江
0阅读
0回复
0点赞
//仅供参考,欢迎指导,改进,分享(程序及注释手搓,不是AI写的)
#include<bits/stdc++.h> //万能头
using namespace std; //命名空间
//-------------------------------------------------------------------------------------------------
bool isprime(int n){ //质数判断
if(n<2){ //边界处理
return false;
}
for(int i=2;i<=sqrt(n);i++){ //从2枚举到√n,减少时间复杂度,也可写作i*i<=n
if(n%i==0){ //如果找到n(除了1与n以外)的因数,那么n就不是质数
return false; //返回n不是质数(假)
}
}
return true; //如果循环结束还没有找到n(除了1与n以外)的因数,那么n就是质数,返回n是质数(真)
}
//--------------------------------------------------------------------------------------------------
string s; //定义字符串类型数组s
int a[30]; //定义整形变量数组a,因为有26个英文字母,所以开30
//-----------------------------------------------------------------------------------------------
int main(){ //主函数
cin>>s; //输入字符串数组s
for(int i=0;i<s.size();i++){ //遍历字符串数组s
int k; //定义整型变量k
char x=s[i]; //定义一个字符型变量x,用来截取s数组的单个字符
k=x-'a'+1; //【重点】ASCII码中,'a'(ASCII码为97)是所有小写字母的基准值,如:'a'-'a'=0,'b'-'a'=1,+1即为小写字母在26个英文字母中的序位
a[k]++; //将对应字母的序位+1
}
sort(a+1,a+27); //sort排序,a+1(第一个)开始一直排到a+27(最后一个),默认升序排列(从小到大)
int minn=1; //定义整型变量minn并赋初值为a数组第一个下标 1
while(minn<=26&&a[minn]==0){ //【重点】边界+寻找第一个不为0的下标位置(因为已经排过序,前面有可能有多个0)
minn++;
}
int ans=a[26]-a[minn]; //算出最大与最小的差,并赋值给ans(ans是 answer 的缩写,在算法竞赛和编程中非常常见,通常用来存储最终答案或中间结果)
if(isprime(ans)){ //判断ans是否为质数
cout<<"Lucky Word"<<endl; //是:输出Lucky Word换行后再输出ans
cout<<ans;
}else{
cout<<"No Answer"<<endl<<"0"; //否:输出No Answer换行后再输出0
}
return 0; //结束程序并恢复变量值(好习惯)
}
这里空空如也







有帮助,赞一个