题解
2025-12-31 17:22:53
发布于:江苏
0阅读
0回复
0点赞
本题考验基本功
首先我们需要知道如何判断质数。对于这么小的数(),其实可以直接打表:
bool zhi(int x){
if(x==2||x==3||x==5||x==7||x==11||x==13||x==17||x==19||x==23||x==29||x==31||x==37||x==41||x==43||x==47||x==53||x==59||x==61||x==67||x==71||x==73||x==79||x==83||x==89||x==97){
return true;
}
return false;
}
当然,我相信题目更想让你们知道这种写法:
bool is_prime(int x) {
if (x <= 1) return false; //这就不是质数
for (int i = 2; i * i <= x; ++i) {//i*i是某种神秘的加密技巧,可以上网搜索一下
if (x % i == 0) return false;//只要是发现有能整除的,那么就不算数。
}
return true;
}
接下来我们就需要记录每一个字符出现的次数了,肯定很轻松地就想到了,但是……
错误示范:
#include <iostream>
using namespace std;
int pael[26];
bool zhi(int x){
if(x==2||x==3||x==5||x==7||x==11||x==13||x==17||x==19||x==23||x==29||x==31||x==37||x==41||x==43||x==47||x==53||x==59||x==61||x==67||x==71||x==73||x==79||x==83||x==89||x==97){
return true;
}
return false;
}
int main(){
string s;
cin>>s;
int maxn=-1,minn=2147483647;
for(auto v:s){
pael[v-'a']++;
maxn=max(maxn,pael[v-'a']);
minn=min(minn,pael[v-'a']);
}
if(zhi(maxn-minn)){
printf("Lucky Word\n%d",maxn-minn);
return 0;
}
printf("No Answer\n0");
return 0;
}
看似能过测试点,但是我想问了,如果有没有出现地字符呢?
那么我们需要优雅地处理没有某个字符地情况:
AC code:
#include <iostream>
#include <string>
#include <climits>
using namespace std;
int pael[26] = {0};
bool is_prime(int x) {
if (x <= 1) return false;
for (int i = 2; i * i <= x; ++i) {
if (x % i == 0) return false;
}
return true;
}
int main() {
string s;
cin >> s;
for (char v : s) {
pael[v - 'a']++;
}
int maxn = -1, minn = INT_MAX;
for (int i = 0; i < 26; ++i) {
if (pael[i] == 0) continue;
maxn = max(maxn, pael[i]);
minn = min(minn, pael[i]);
}
int diff = maxn - minn;
if (is_prime(diff)) {
cout << "Lucky Word" << endl;
cout << diff << endl;
} else {
cout << "No Answer" << endl;
cout << 0 << endl;
}
return 0;
}
这里空空如也


有帮助,赞一个