这其实是2024年11月5号完成的,今天刚想起来自己还有个博客园账号(你敢信这是我大一在网上搜政治经济学期末考题时发现的宝藏网站),就一并发到园子里了。
汇报下本人情况以及考研408进度:
1.末九经济学大三,高中物化生。自认为经济学太虚浮(他们都在妄想拟合现实,而且很多假设都是他们的yy罢了【超小声,嘘!】),主要还是本人对算法比赛等竞技性的东西感兴趣,而且本人高中物理较擅长,对自己跨考计算机有信心。
2.C语言已学完。
408数据结构:学到图的广度优先遍历;
计组:学到第二章;
操作系统:一无所知(呜呜呜)
计网:学到数据链路层。
今天是报名ACwing第二天,做一下昨天听完基础语法的第一讲的做题心得。
第一大点.(库的选择)
#include <cstdio>包含scanf,printf
#include <iostream>包含cin,cout
#include <bits/stdc++.h> 万能库,包含以上2个,但编译时间过长(虽然不会计入代码运行时间)
库的选择问题:
**有对结果要求保留多少精度的选printf,即<cstdio>
*scanf不能直接输入字符串,要借助循环;
*scanf输入时不能限定小数点有几位
**若要输入输出字符串的话,更方便用cin,cout,即<iostream>【见AcWing 613. 面积】
*cout输出时如果要包含空格,这个空格要在" "内。
第二大点(新函数与库)(基础不好的我原来只知道C语言中的<stdio.h>和<stdlib.h>,呜呜呜)
**第一个新库#include <cmath>
*用到了其中的sqrt()【求平方根】和pow(a,b)【求a的b次方】
*用到了其中的max(a,b)【求a,b中较大的那个】
补充:max(a,b)=(a+b+abs(a−b))2
第三大点(贪心算法初相遇)【见AcWing 653. 钞票】
遇到循环输出有规律的东西时,我们可以先创立一个数组,把有规律(或是说有顺序的东西先按序排列进去,然后在用一个for循环遍历这个数组进行输出)
第四点(昨天收获最大的一题)【AcWing 656. 钞票和硬币】
**核心一:仍然是贪心的思想
*一般可以借助/和%的方法来进行贪心,但是/(我们想要整除),本题中的数字却是浮点数,则会导致我们进行标准的正常除法。
解决方法:使用 static_cast<int>(total / value[i]) 来计算纸币和硬币的数量。
static_cast<int> 会将浮点数转换为整数,但不会截断小数部分。
效果优于使用(int)total / (int)value[i];
原因是:当total、value[i]小于1时,(int)会让其==0,0/0无意义。
总结:static_cast<int>(total/value[i])是对2个浮点数正常相除的结果取整数部分
(int)total/(int)value[i] 是将2个浮点数都变成整数再整除(变了2次,精度更低且无法有效处理小于1的情况)
**核心二:浮点数的取余
解决方法:利用函数fmod(a,b),函数在<cmath>中;
**核心三:添加偏移量来避免精度问题
问的AI:通常,对于保留两位小数的情况,偏移量选择 0.0001。
浮点数在计算机中是以近似值存储的,这可能导致一些小数无法精确表示。例如,0.1 在二进制中是一个无限循环小数,因此在计算机中存储时会有微小的误差。这种误差在进行多次运算时会累积,导致最终结果不准确。
举例:
在处理硬币面值= 0.10 时,total 为 0.20,计算 0.20 / 0.10 应该得到 2,但实际结果可能是 1.9999999999999998,这会导致 static_cast<int>(1.9999999999999998) 得到 1,而不是 2。
标签:26,include,软微刷题,int,浮点数,value,DAY1,static,total
From: https://www.cnblogs.com/ghxwin/p/18534102