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

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

1天前

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,求满足条件的不同邀请方案总数。题目考察动态规划、状态转移及组...

【蓝桥杯省赛】2014年A组波动数列题解:动态规划解法与代码解析(C++实现)

【蓝桥杯省赛】2014年A组波动数列题解:动态规划解法与代码解析(C++实现)

一、题目解读“波动数列”是2014年蓝桥杯省赛A组的一道经典题目。题目要求生成一个数列,其前n项的和模n等于给定值s,且每项只能通过加减固定值a、b波动。问题本质是求解满足特定模运算条件的数列组合方案...

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

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

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

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

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

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

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

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

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

发表评论

访客

看不清,换一张

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