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

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

8个月前 (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;  
}

五、总结

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

原创内容 转载请注明出处

分享给朋友:

相关文章

牛客网288555题解题指南:动态规划求解小红的暑假(附代码解析)

牛客网288555题解题指南:动态规划求解小红的暑假(附代码解析)

一、题目解读牛客网288555题要求解决一个组合数学问题:有三位朋友,每天需邀请其中一位参加聚会,但不能连续两天邀请同一位朋友。给定天数n,求满足条件的不同邀请方案总数。题目考察动态规划、状态转移及组...

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

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

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

NOI 2001密码锁(洛谷P2024)解题全解析:并查集+关系标记算法实战

NOI 2001密码锁(洛谷P2024)解题全解析:并查集+关系标记算法实战

一、题目解读2001年NOI密码锁(洛谷P2024)是一个经典的逻辑判断问题。题目描述了一个动物园中动物之间的关系,需要处理两种类型的陈述:同类关系(1)和捕食关系(2)。要求根据给定的K条关系,判断...

力扣面试16.18题解析:模式匹配问题的算法优化与实现(动态规划+字符串匹配)

力扣面试16.18题解析:模式匹配问题的算法优化与实现(动态规划+字符串匹配)

一、题目解读力扣面试16.18题要求判断字符串value是否可通过替换模式串pattern中的字符"a"和"b"(任意非空子串)进行匹配。例如,模式"...

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

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

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

发表评论

访客

看不清,换一张

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