ZISUOJ 2022年算法基础公选课练习四(Map)

说明:

        博主为了提早预习数据结构和C++的一些知识,自己琢磨外加查阅资料所写的代码,题目来源于22年初的学院老师组织的算法基础公选课的练习。我的代码甚至思路肯定存在许多不足和错误,欢迎大家批评指正。

题目列表:

问题 A: 数据排序——统计数字 

思路:

        开一个map<int,int>的map,键对应出现的数字,值对应键的值出现的次数,一旦出现一个数,则把该数的出现次数加1,最后遍历输出即可。值得注意的是,map默认是从小到大排列的,如果是string类型,那么默认是按字典序从小到大排列的,这跟它内部的实现有关。

参考题解:
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
map<int,int> mp;
void solve(){int n;cin >> n;int num;while(n--){cin >> num;mp[num]++;}for(auto &it:mp) cout << it.first << ' ' << it.second << endl;
}
signed main(){//问题 A: 数据排序——统计数字ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int _ = 1;
//    cin >> _;while (_--){solve();}return 0;
}

问题 B: c++和stl入门——数单词

 

思路:

        同理,开一个map<string,int>的map,键对应出现的单词,值对应该单词出现的次数,一旦出现一个单词,则把该单词的出现次数加1,最后遍历输出即可。

参考题解:
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
map<string,int> mp;
void solve(){int n;cin >> n;string s;while(n--){cin >> s;mp[s]++;}int maxn=0;string maxs;for(auto &it:mp){if(it.second>maxn){maxn = it.second;maxs = it.first;}}cout << maxs << endl;
}
signed main(){//问题 B: c++和stl入门——数单词ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int _ = 1;
//    cin >> _;while (_--){solve();}return 0;
}

问题 C: 数据排序——众数

思路:

        与A题思路相同,只不过输出的时候只输出出现次数最多的数(可能不止1个)和出现次数。

参考题解:
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
using ll = long long;
map<int,int> mp;
void solve(){int n;cin >> n;int num;while(n--){cin >> num;mp[num]++;}int maxn=0;for(auto &it:mp) if(it.second>maxn) maxn=it.second;for(auto &it:mp) if(maxn==it.second) cout << it.first << "  " << it.second << endl;
}
int main(){//问题 C: 数据排序——众数ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);int T=1;
//	cin >> T;while(T--) solve();return 0;
}

问题 D: 不重复地输出数

思路:

        其实这个题用set做更合适、直观一些,但是放在map的习题里面,那我们就用map做吧。同理,出现过的数字就输出,出现多次的只输出一次即可。

参考题解:
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
map<int,int> mp;
void solve(){int n;cin >> n;int num;while(n--){cin >> num;mp[num]++;}for(auto &it:mp) cout << it.first << ' ';cout << endl;
}
signed main(){//问题 D: 不重复地输出数ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int _ = 1;
//    cin >> _;while (_--){solve();}return 0;
}

问题 E: 最高分数的学生姓名

思路:

        开一个map<string,int>,键存放学生的名字,值存放其的成绩,然后遍历map名字打擂台查找最高分,然后再遍历一遍map输出最高分的名字。

参考题解:
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
map<string,int> mp;
void solve(){int n,score;cin >> n;string name;while(n--){cin >> score >> name;mp[name] = score;}int maxscore = 0;for(auto &it:mp) if(it.second>maxscore) maxscore = it.second;for(auto &it:mp) if(it.second==maxscore) cout << it.first << endl;
}
signed main(){//问题 E: 最高分数的学生姓名ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int _ = 1;
//    cin >> _;while (_--){solve();}return 0;
}

问题 F: 水果

思路:

        这题好在我在期末考前刷到过,但是当时没学map没写出来,期末考的时候用结构体数组加sort()函数写出来了,现在回过头看看这个题用map来写是真的很简单。map根据字符串按字典序从小到大排序的特点,我们无需对内部数据再进行排序了,直接读入,然后遍历输出即可。

参考题解:
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
map<string,map<string,int> > mp;
void solve(){int n,num;cin >> n;string fruit,province;mp.clear();while(n--){cin >> fruit >> province >> num;mp[province][fruit] += num;}for(auto &it1:mp){cout << it1.first << endl;for(auto &it2:it1.second) cout << "   |----" << it2.first << '(' << it2.second << ')' << endl;}cout << endl;
}
signed main(){//1332: 水果ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int _ = 1;cin >> _;while (_--){solve();}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/469632.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++】类和对象(四)

前言&#xff1a;在类和对象中&#xff0c;我们走过了十分漫长的道路&#xff0c;今天我们将进一步学习类和对象&#xff0c;类和对象这块荆棘地很长&#xff0c;各位一起加油呀。 &#x1f496; 博主CSDN主页:卫卫卫的个人主页 &#x1f49e; &#x1f449; 专栏分类:高质量&a…

旋转位置编码原理及代码

旋转位置编码原理及代码 旋转位置编码 RoPE(Rotary Positional Encoding)当位置发生偏移时&#xff0c;只需要旋转角度外推性&#xff0c;指大模型输入长度超过预训练文本长度时&#xff0c;输出表现变化情况。 使用绝对位置编码具有外推性上的限制&#xff0c;旋转位置编码则…

Ps:焦点堆栈

焦点堆栈 Focus Stacking是一种摄影和图像处理技术&#xff0c;通过合并多张在不同焦距拍摄的照片来创建一张具有更大景深的图像&#xff0c;特别适用于微距摄影、风景摄影和任何需要在整个场景中保持尖锐对焦的情况。 ◆ ◆ ◆ 拍摄注意事项 1、使用三脚架 为了确保图像之间…

《小强升职记:时间管理故事书》阅读笔记

目录 前言 一、你的时间都去哪儿了 1.1 你真的很忙吗 1.2 如何记录和分析时间日志 1.3 如何找到自己的价值观 二、无压工作法 2.1 传说中的“四象限法则 2.2 衣柜整理法 三、行动时遇到问题怎么办&#xff1f; 3.1 臣服与拖延 3.2 如何做到要事第一&#xff1f; 3.…

【一周年】我的创作纪念日

今天&#xff0c;是我成为创作者的第366天&#xff0c;不知不觉&#xff0c;来CSDN已经一年啦~ 在这个特殊的日子&#xff0c;也给大家讲讲我的创作故事。 一、机缘 起初&#xff0c;刚认识CSDN时&#xff0c;我的高中生涯刚结束&#xff0c;顺利从一名懵懂的高中生变身为一名懵…

Linux第53步_移植ST公司的linux内核第5步_系统镜像打包并烧录到EMMC

本节主要学习系统镜像打包&#xff0c;然后将打包文件烧录到EMMC测试。 1、创建bootfs文件夹 1)、打开第1个终端 输入“ls回车” 输入“cd linux/回车”&#xff0c;切换到“linux”目录 输入“ls回车”&#xff0c;列出“linux”目录下的文件和文件夹 输入“cd atk-mp1/…

Go语言中的加密艺术:深入解析crypto/subtle库

Go语言中的加密艺术&#xff1a;深入解析crypto/subtle库 引言crypto/subtle库概览ConstantTimeCompare函数深入解析ConstantTimeSelect函数应用详解ConstantTimeLessOrEq函数实践指南安全编程实践性能优化与最佳实践与其他加密库的比较总结 引言 在当今快速发展的互联网时代&…

localStorage、sessionStorage、cookie区别

localStorage: localStorage 的生命周期是永久的&#xff0c;关闭页面或浏览器之后 localStorage 中的数据也不会消失。localStorage 除非主动删除数据&#xff0c;否则数据永远不会消失 sessionStorage: sessionStorage 的生命周期是仅在当前会话下有效。sessionStorage 引入…

C语言第二十四弹---指针(八)

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】 指针 1、数组和指针笔试题解析 1.1、字符数组 1.1.1、代码1&#xff1a; 1.1.2、代码2&#xff1a; 1.1.3、代码3&#xff1a; 1.1.4、代码4&#xff1a; 1…

C++的进阶泛型编程学习(1):函数模板的基本概念和机制

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、模板1.1 模板的概念1.1.1 形象的解释&#xff1a;模板就是通用的模具&#xff0c;目的是提高通用性1.1.1 模板的特点&#xff1a;1.1.2 综述模板的作用 1.2…

OpenGL-ES 学习(1)---- AlphaBlend

AlphaBlend OpenGL-ES 混合本质上是将 2 个片元的颜色进行调和(一般是求和操作)&#xff0c;产生一个新的颜色 OpenGL ES 混合发生在片元通过各项测试之后&#xff0c;准备进入帧缓冲区的片元和原有的片元按照特定比例加权计算出最终片元的颜色值&#xff0c;不再是新&#xf…

Codeforces Round 920 (Div. 3)

D. Very Different Array&#xff08;贪心双指针/前缀和&#xff09; 思路&#xff1a;绝对值就是线段-->让线段最长&#xff08;肯定是越在最短端找最右端的 越最右端找最左端的&#xff09;-->判断怎么连哪段最长(采用双指针的策略去判断&#xff09; &#xff08;左红…