14天想冲刺蓝桥杯省一day2

多组输入
一·有条件的多组输入
例题1·题目描述:若干数字,最后一个是0,计数偶数,求和奇数.
输入:134560只有一行,输入的数字不超过int的范围
输出:2
9
解题思路:可以使用getline和vector的组合(因为题目没有说的是输入若干数字),也可以直接使用while(cin>>n),小细节:tips1 题目中sum,count记得把初始值赋值为0哦,如果不赋值为0,程序会随机赋值给他。tips2 通过cin>>x的方式,在while循环里面,只要读取了一个数据就表示读取成功返回true.因此需要再判断0结尾的情况。
二·无条件的多组输入
例题2·题目描述:若干数字,,计数偶数,求和奇数.int范围内
解题思路:没有结束条件,把题目一的if(n==0)删除就可以了

例题3·题目描述:计算标题中的字符数量,标题包含换行符和空格。
输入:一个字符串
输出:数量
解题思路:使用getline,然后操作字符串数组
例题4·题目描述:同3. 输入:第一行n表示字符串长度 第二行一个字符串
输出:
解题思路:读入的字符串有空格,肯定要用getline来读取,但是cin后会留下回车。处理好这点就可以解决此题
关键点:1getline()函数遇到回车停止读,没办法控制要读多少,读多少取决于原来的文本有多长。cin会在读入数据后把回车留在缓冲区,getline如果这时候读取数据,会在一开始就读取到这个回车,然后不往下继续读,但是会把这个回车给消除掉。2cin只能读取一个“整块”,如果要读取13 14这样中间有空格的一组数据必须用两个变量去接住变量。
*通用解法是在cin后面加一个cin>>ws(吃掉缓存区里面的所有换行符,空格之类的)
对于输入只需要考虑用getline还是cin就行。
日期问题
一·模板 与模运算结合使用(数学基础会讲到)
例题1:确定天数,求目标日期,循环确定的天数。

例题2:确定目标日期,求天数。使用while循环,循环到目标日期,day一样放到模板里面,多一个days来计算总天数

例题3:确定天数,求日期。(涉及取模运算后面讲)

例题4:题目描述 有当前时间,经过的毫秒数,把毫秒数转换成时 分 秒,
已知天数,求目标日期。

例题5:

stl标准模板库
一·map
简介:map就是一个自动排序的通讯录,存入的数据是成对的,但是名字要不能重复
基本用法:查找find()返回的是迭代器。删除传入键直接删除整个键值对。

map的特点:1一人一号,每个名字只能对应一个号码。 2号码是经过排序过的,查找时很高效,就像把档案分门别类好,而不是胡乱堆砌。 3使用方括号访问map里面的数据,如果名字没有在通讯录里面,会先把名字写在通讯录里面,然后值就先空着。 4 map的迭代器很高级,可以来回查找,灵活遍历数据。即迭代器可以++也可以--

map构造函数:可以分为两类,传统类和拷贝类。传统类:1 map<string,int> sorce; 2 列表构造。
拷贝类:1 拷贝构造(直接使用赋值符号拷贝过来),map<string,int> newsouce=sorce; 2 范围构造(自定义要赋值sorce的哪一部分)。 3 移动构造(直接拷贝ssorce而且把sorce给删除掉)。
unordered_map:乱序通讯录。乱序的字典在查找的时候最好情况是直接找到(1),最坏情况是(n)。
map的高级功能:1可以自定义如何排序,默认升序,也可以降序排。
2范围查询,例如想查询80分以上的。lower_bound(90) 90分及以上,uper_bound(90) 表示90以上
3使用swap()可以交换两个map,map之间支持合并。

set
一set的基本用法
1创建与插入(自动去重和自动排序),set a; a.insert(2);
2find查找返回迭代器, 3删除操作 a.erase(2);
set的迭代器是一个只读迭代器,所以不允许通过迭代器修改set中的元素,只能coutset里面的元素、set的构造函数和map一样的。
unordered_set和前面map的是一样的。还有2高级功能也一样。

priority_queue
一·基本原理:1创建与插入,priority的插入并不是像普通队列那样按照先进先出的顺序,而是按照元素的权重来调整输出顺序,权力大的先走。priority_queue pq; pq.push(10);
2查看与删除(只2服务老大)
top()永远村的是老大。pop弹出的是顶端的元素,所以pop永远弹出的都是老大。
pq的底层原理是 大顶堆(大的数字在顶上的堆):一种特殊二叉树,所有父节点大于子节点,像一个金字塔结构,所以叫堆。当push一个元素进来,他在末尾,和他的父亲比较,不断的上浮,直到他比某一个父亲小就停止上浮。pop的时候,塔尖可能比儿子小,所以会被拉下去,叫下沉
自定义构造函数:可以使用小顶堆实现队列,greater表示降序,实现小顶堆要有三个参数 priority_queue<int,vector ,greater> min;第一个int表示存储的类型,第二个是实际存储数据的位置,在大顶堆里面不写这个是默认就是他,第三个参数就是小顶堆的开关。
自定义类型的优先队列:处理复杂的数据结构,并且按照自定义规则来排序
1数据定义 struct task{int priority;string descripetion;}任务的优先级和任务的描述
2排列逻辑 priority大的则被认为是老大任务。重载小于号。bool operator<(const task& other) const{return priority<other.periority}
pair
一·简介与基本用法 只有两列的列表,例如省份证和名字,把他们绑定在一起
直接构造pair<int,string> p1(1,"a")
make_pair:懒人首选写法,auto自动组装出pair
auto p2=make_pair(2,"b");pair也用first和second
pair的比较也是按照字典序比较,先比较first。同类型的pair可以赋值
二·常用场景 1与map结合,pair就是map中的每个键值对
2函数返回多个值pair可以作为一个返回类型,一次性返回两个值,打破原来return一次只能返回一个值的限制。 pair<int,int> a(){return }

3存坐标或者权重(图论几何问题)*pair可以认为是一个新的数据类型
vector<std::pair<int, int>> points = {
std::make_pair(1, 2), // (1,2)
std::make_pair(3, 4), // (3,4)
std::make_pair(5, 6) // (5,6)

杂项
一·结构体排序 1定义学生档案袋 struct student{string name;int age;double grade;}; 2制定家规 return a.age>a.age;表示如果a的age大于b的age,那么就判定a大于b。bool compare(a,b){if(gradesame)returna.age<a.age; return a.grade>b.grade;} 3正式排序 sort(begin,endcompare);
自定义比较函数:用完即弃 1写一个像compare那样的函数 2 运算符重载 3 lambda定义比较函数,直接在sort内部实现比较函数的定义。sort(begin,end,); 方括号内如果放一个&说明函数体内还会用到main中的数据。这就是数学的纳姆塔,匿名函数
浮点数精度问题

posted @ 2026-04-01 15:32  花捂嘴  阅读(17)  评论(0)    收藏  举报