- 博客(15)
- 收藏
- 关注
原创 判断质数的高效方法
【摘要】该代码实现了一个高效的质数判断函数,基于数学规律:大于3的质数必然是6k±1形式(k为正整数)。函数首先排除小于等于1的数,然后特判2和3。接着检查数字是否符合6k±1形式,不符合则直接返回false。对于符合条件的数,通过检查能否被6k±1形式的数整除来进一步判断。这种方法通过预先过滤明显非质数的情况,提升了判断效率。算法时间复杂度为O(√n),相比简单遍历法更高效。
2025-09-11 21:30:32
270
原创 P1603 斯诺登的密码 题解
该程序将输入的英文数字单词转换为数字并平方后输出最小组合。首先定义数字单词与数字的映射关系,包括正规数字(1-20)和非正规数字(如"a"对应1)。输入以"."结束,将匹配的数字平方后存入数组。排序数组后,将每个数字取模100,首位不补零,其余补零输出。若无数字输入则输出0。通过控制首位标志确保正确格式化输出。
2025-09-05 22:41:17
621
原创 P5734 【深基6.例6】文字处理软件 题解
二:截取字符串第a起后b个字符,字符串就好比如一个字符数组,可以用索引来分别找出字符串的每个字符,所以可以创建一个空字符串(来存储a到a+b的字符),所以 string res = ""用循环从a到 b的位置,例如截取1到8的位置,则for(int i = 1;一:在初始输入的字符串后拼接一个新的字符串,并且输出拼接后的新的字符串,例如“123”后拼接“45”,输出“12345”,很明显的可以用到字符串的“加法”,字符串的加法就是直接将两个字符串拼接在一起。s.substr(6),从索引6到末尾。
2025-09-05 00:47:28
623
原创 P1957 口算练习题 题解
这道题不用判断YunSuanFu 不是a,b,c其中之一,因为题目说明,第一次输入的一定是字母,所以一定会执行a b c三个条件语句,所以第二次循环的时候,YunSuanFu已经是上一次循环的字母,如果后续不再输入字母,则继续沿用上一次循环的计算方法,这符合我们的题目。这里有一个很好的想法:就是先输入一个数据然后根据这个数据在考虑后续的输入,例如这里第一次循环是输入一个a,所以后续需要输入两个数字,所以if(p == 'a') cin>>num1>>num2;
2025-09-01 23:49:41
773
原创 P1125 [NOIP 2008 提高组] 笨小猴 题解
word1[i] - 'a'得出了字母对应的数字,这样才可以存储到cnt[26]中,例如word1的第i个是a ,则'a'-'a' = 0则cnt[0]++,cnt[0] == 1。思路:计算每个字母出现的次数,然后找出最大值和最小值,相减判断是否为质数,是则输出Lucky Word;这道题主要学了如何计算字符串中出现的字母,用数组cnt[26]存储,记住,word[i]要减去'a'才可以是阿拉伯数字对应0-26。初始化一个最值,然后和后续的比较,如果后续的大/小,则后续的为新最值。
2025-09-01 23:38:40
450
原创 P1205 [USACO1.2] 方块转换 Transformations
该代码实现了USACO1.2题目中的方块转换功能,通过6种不同的变换方法判断输入的正方形图案能否转换为目标图案。主要包含以下功能: 实现了90°、180°、270°顺时针旋转(work1-3) 实现了水平翻转(work4)和组合变换(work5) 包含直接比较原始图案和目标图案是否相同(work6) 使用二维数组存储和比较图案,通过嵌套循环实现各种变换 采用布尔函数判断变换是否成功,主函数依次检测各种变换可能性 算法通过观察变换前后元素位置关系,使用双层循环重构图案,并采用"先假设不相等"
2025-08-27 19:32:12
862
原创 P5730 【深基5.例10】显示屏 题解
该C++程序实现了数字的LED显示屏效果输出。程序通过三维数组存储0-9数字的5行3列点阵表示,外层循环控制行数(5行),中层循环遍历输入数字字符串,内层循环输出每个数字的3列字符。每行输出时数字间用点分隔,最后一个数字后不加点。这种分层控制结构确保按行顺序输出所有数字的对应部分,避免光标错位问题。程序通过合理的循环嵌套和条件判断实现了规范的数字点阵输出格式。
2025-08-26 18:05:29
187
原创 高精度减法
本文介绍了高精度减法的实现方法。通过将大数用字符串存储并转换为数组处理,解决了long long类型无法存储超大整数的问题。关键点包括:1)使用数组倒序存储数字;2)比较函数确保大数减小数;3)借位处理减法过程;4)前导零的正确处理(注意使用c[lenc-1]而非c[lenc])。算法首先比较两数大小,必要时交换并输出负号,然后逐位相减并处理借位,最后逆序输出结果。特别提醒数组下标和借位处理时的边界条件。
2025-08-26 00:50:39
578
原创 LuoguP1075质因数分解
该代码展示了如何通过模块化思维解决质因数分解问题。首先定义独立的isPrim函数判断质数,然后在主函数中遍历寻找能整除n的最小质数i,并输出n/i作为结果。代码分析指出:1)使用埃氏筛法会因大数组导致内存溢出;2)强调模块化编程的重要性,将功能拆分为判断质数和寻找因数两个独立模块,便于调试和修改。这种分模块的编程方式能有效降低复杂度,提高代码可维护性。
2025-08-24 17:06:30
283
原创 LuoguP1217判断回文质数
不可以,因为我们定义的bool数组的isPrim[2] == true 利用2的倍数为合数来筛选出质数的,但是如果我们从isPrim[a]来开始,isPrim[a] == true ,但是a不一定是质数,导致后面质数筛选错误。为什么需要乘10,是为了还原位数,例如12321,temp % 10 是 1,r 一开始是0,所以 r =1。再后来temp % 10 是2,r 是1 乘上10 为10 加上2为12,...之后就变成12321 还原了位数。回文数:正序和倒序的大小是一样的,如12321。
2025-08-23 15:30:10
378
原创 高精度加法和乘法
这段C++代码实现了大数的加法和乘法运算。通过字符串处理大数,使用数组存储每一位数字并模拟竖式计算过程。加法采用逐位相加处理进位的方式,乘法通过双重循环实现每位相乘并累加。代码包含前导零处理、进位处理等关键步骤,并提供了详细的注意事项说明,包括运算顺序、循环次数控制、结果长度预估等实现细节。两种运算都支持任意长度的非负整数运算,最终结果以字符串形式返回。
2025-08-23 00:03:39
662
原创 左值和右值
C++中左值和右值的区别:左值具有地址,可出现在赋值号左侧,可被取地址(如变量、对象);右值通常是临时值,无地址,不能出现在赋值号左侧(如字面量、表达式结果)。判断方法:能取地址的是左值,否则是右值。const引用可绑定右值,但会创建临时变量延长其生命周期。非const引用不能绑定右值,因修改临时值无意义且易出错。
2025-08-19 15:47:41
200
原创 递增运算符重载
摘要:本文演示了C++中前置和后置递增运算符的重载实现。前置递增通过返回对象引用实现连续递增(++(++obj));后置递增使用int占位符区分,需创建临时对象保存原值并返回副本。关键点:1)后置递增返回临时对象副本,编译器仅保留一次;2)cout和加法重载需使用const引用,因临时对象(右值)不能绑定非const引用。测试案例验证了两种递增方式的正确实现,特别是后置递增在表达式中的行为。
2025-08-19 15:15:12
657
原创 return *this 和return this的区别
本文讨论了C++中运算符重载时返回*this的两种方式:返回对象引用和返回对象副本。关键区别在于函数返回类型是否包含引用符号&。当返回类型为类名&时返回原对象引用,直接为类名时则返回对象副本。文中通过myinteger类的递增运算符重载示例说明:返回引用会修改原对象,适合链式操作;返回副本则只修改临时对象,原对象不变。判断返回类型的方法是观察函数声明中的&符号存在与否。理解*this的解引用特性对正确实现运算符重载至关重要。
2025-08-18 23:20:25
619
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅