当前位置:首页 > 提高组 > 2008年NOIP笨小猴(洛谷P1125)解题报告:质数判断与字母统计优化解析

2008年NOIP笨小猴(洛谷P1125)解题报告:质数判断与字母统计优化解析

2周前 (08-30)

2008年NOIP笨小猴(洛谷P1125)解题报告:质数判断与字母统计优化解析 质数判断 字符统计 算法优化 第1张

一、题目解读

2008年NOIP“笨小猴”题目(洛谷P1125)要求判断输入单词中字母出现次数的最大值与最小值之差是否为质数。若是,输出“Lucky Word”及差值;否则输出“No Answer”和0。题目核心在于字符统计质数判断的巧妙结合。

二、解题思路

1. 字符统计:遍历输入字符串,用数组记录26个字母的出现次数,并更新最大/最小值。

2. 质数判断优化:自定义isPrime函数,利用质数特性(仅需检查至√n的奇数),排除偶数后加速判断。

3. 差值计算:通过maxn - minn得到差值,结合质数结果输出对应答案。

三、解题步骤

1. 输入单词,初始化计数数组与极值变量。

2. 循环遍历字符,将对应字母次数累加。

3. 扫描计数数组,更新最大/最小值。

4. 计算差值并调用isPrime判断,输出结果。

四、代码与注释

#include <iostream>  
#include <string>  
#include <cmath>  
#include <algorithm>  
using namespace std;  

// 判断是否为质数(优化:仅检查奇数至√n)  
bool isPrime(int n) {  
    if (n <= 1) return false;  
    if (n == 2) return true;  
    if (n % 2 == 0) return false;  
    for (int i = 3; i <= sqrt(n); i += 2) {  
        if (n % i == 0) return false;  
    }  
    return true;  
}  

int main() {  
    string word; cin >> word;  
    int maxn = 0, minn = 100; // 初始化极值  
    int count[26] = {0}; // 字母计数数组  
    // 统计每个字母出现次数  
    for (char c : word) count[c - 'a']++;  
    // 寻找最大/最小值  
    for (int i = 0; i < 26; i++) {  
        if (count[i] > 0) {  
            maxn = max(maxn, count[i]);  
            minn = min(minn, count[i]);  
        }  
    }  
    int diff = maxn - minn;  
    if (isPrime(diff)) {  
        cout << "Lucky Word" << endl << diff;  
    } else {  
        cout << "No Answer" << endl << 0;  
    }  
    return 0;  
}

五、总结

本题关键在于高效的字符统计与优化的质数判断。通过预处理排除偶数、缩小检查范围,降低了时间复杂度。代码简洁实用,体现了基础算法与数学思维的融合,适合作为编程入门训练题。

原创内容 转载请注明出处

分享给朋友:

相关文章

【力扣3115题解】数组中质数最大差值的求解(C++代码详解)

【力扣3115题解】数组中质数最大差值的求解(C++代码详解)

一、题目解读力扣3115题要求在一个整数数组中,找出两个质数之间的最大差值。若数组不存在质数,则返回0。题目核心在于高效筛选质数,并计算其索引差值的最大值,需兼顾时间与空间复杂度。二、解题思路参考代码...

【GESP五级真题】挑战怪物(洛谷B4050)题解:质数筛法+动态规划优化,高效攻克魔法攻击策略

【GESP五级真题】挑战怪物(洛谷B4050)题解:质数筛法+动态规划优化,高效攻克魔法攻击策略

一、题目解读2024年GESP五级题“挑战怪物(洛谷B4050)”要求玩家计算击败怪物所需的最小攻击次数。怪物血量H可被分解为魔法攻击(消耗质数血量)与物理攻击(每次固定伤害)的组合。题目难点在于如何...

洛谷1363题解法:虚拟坐标优化BFS解决循环迷宫问题(附代码详解)

洛谷1363题解法:虚拟坐标优化BFS解决循环迷宫问题(附代码详解)

一、题目解读洛谷1363题要求判断在给定大小的循环迷宫中,从起点出发是否可以通过移动到达多个不同的路径方向。迷宫由字符矩阵表示,'S'为起点,'#'为障碍物,其余为可通...

2002年NOIP提高组 字串变换 解题报告:广度优先搜索与哈希表优化(洛谷P1032)

2002年NOIP提高组 字串变换 解题报告:广度优先搜索与哈希表优化(洛谷P1032)

一、题目解读“字串变换”问题要求将字符串A通过一系列规则变换为B,每次变换可替换A中某个子串为指定目标串,输出最少变换步数或“NO ANSWER!”。题目关键在于高效搜索所有可能的变换路径,并避免重复...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。