news 2026/5/16 12:30:58

挑选苹果pta

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
挑选苹果pta

借鉴jinzun2000大佬的思路

我做出了一些注释和优化

重点

1动态数组存储class Apple类

2map匹配篮子号和苹果id

果园采摘了n个苹果,分别放在若干个篮筐中。现给出n个苹果所在篮筐的情况,请找出每个篮筐中重量最重的苹果。定义一个苹果类Apple,有编号(id)、重量(weight)、直径(diameter)成员变量。

输入格式:

首先输入一个整型数n(1<=n<=999999),表示n个苹果。
紧跟着n行输入,每一行格式为:篮筐号,苹果编号(id),重量(weight),直径(diameter)。
篮筐号为整数,取值区间为[1,999999],id为字符串,weight、diameter为正整数。

输出格式:

按篮筐号从小到大排序,输出每个篮筐中重量最重的苹果信息。题目保证每个篮筐中只有一个重量最重的苹果。

输入样例

7 1 N000001 175 77 2 N000002 180 83 2 N000003 160 66 1 N000004 160 63 1 N000005 165 68 4 N000006 183 85 2 N000007 170 74

输出样例

1 N000001 175 77 2 N000002 180 83 4 N000006 183 85
#include <bits/stdc++.h> using namespace std; class Apple { public: Apple(string id, int w, int d) { //创建赋值 a_id = id; weight = w; diameter = d; } void print_fun();//输出 //定义 string a_id; int weight, diameter; }; int re_Apple(int n, string s, vector<Apple> *A) { // 通过苹果id,找苹果在vector中的位置 for (int i = 0; i < n; i++) {//遍历vector if (s == ((*A)[i].a_id)) { return i; } } return -1;//没找到 } void Apple::print_fun() { cout << this->a_id << " "; cout << this->weight << " "; cout << this->diameter << endl; } int main() { int N; cin >> N; vector <Apple> v; map<int, string> Map;//[框子号,苹果id] for (int i = 1; i <= N; i++) { string id; int w, d, basket; cin >> basket >> id >> w >> d; v.push_back(Apple(id, w, d)); if (Map.find(basket) == Map.end()) {//没找到 Map[basket] = id;//若basket不存在,则创建 } else { //baseket 已存在 if (w > v[re_Apple(v.size(), Map[basket], &v)].weight)//当前苹果和篮子中现存最大苹果相比较 Map[basket] = id; } } for (auto &e : Map) { cout << e.first << " "; v[re_Apple(N, e.second, &v)].print_fun(); } return 0; }

看过一个vector<int> basket (999999+1)的代码

int re_Apple(int n, string s, vector<Apple> *A) { // 通过苹果id,找苹果在vector中的位置
for (int i = 0; i < n; i++) {//遍历vector
if (s == ((*A)[i].a_id)) {
return i;
}
}
return -1;//没找到
}

这一段功能函数优化了很多,负责通过苹果的id Map[basket](e.second)来找寻这个苹果

在vector中存储的位置,省空间省力

if (w > v[re_Apple(v.size(),Map[basket], &v)].weight)//当前苹果和篮子中现存最大苹果相比较

这个思路是不是让人眼前一亮呢

psmap.find()找寻key值 (键值升序哦

若想找value

则1for (auto it = myMap.begin(); it != myMap.end(); ++it) {
if (it->second == target_value) {
cout << "找到value='" << target_value << "',对应的key=" << it->first << endl;
break;
}
}

2auto it = find_if(起始迭代器, 结束迭代器, 条件函数);

#include <algorithm>

bool isApple(const pair<int, string>& element) {
return element.second == "apple";
}

// 使用
auto it = find_if(myMap.begin(), myMap.end(), isApple);

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/10 14:17:24

22、优化搜索与数据聚合分析

优化搜索与数据聚合分析 在搜索和数据分析领域,有许多实用的工具和技术可以帮助我们更好地处理和理解数据。下面将详细介绍如何使用 Elasticsearch 进行同义词扩展、字段分析、查询解释以及数据聚合分析。 1. 使用 WordNet 同义词 如果要使用 WordNet 结构的同义词,需要为…

作者头像 李华
网站建设 2026/5/11 8:53:38

16、深入探索Eclipse 4应用开发的核心技术

深入探索Eclipse 4应用开发的核心技术 在Eclipse 4应用开发中,有许多关键技术和操作方法能帮助开发者更高效地构建强大的应用。以下将详细介绍获取窗口引用、获取选择项、处理事件、按需计算值以及与UI交互等方面的内容。 1. 获取窗口引用 在Eclipse 3.x应用中,通常通过静…

作者头像 李华
网站建设 2026/5/11 0:23:57

17、深入探索Eclipse 4应用开发

深入探索Eclipse 4应用开发 1. 安全的UI线程交互 在Eclipse 4应用开发中,安全地与UI线程进行交互是一个重要的问题。使用 UISynchronize 是一种安全的交互方式,它提供了一种与UI线程安全交互的途径。另一种实现方式是使用 UIJob 。使用 UISynchronize 的一个优点是它…

作者头像 李华
网站建设 2026/5/15 11:04:14

24、Elasticsearch 聚合分析全解析

Elasticsearch 聚合分析全解析 在数据处理和分析中,聚合操作是一项非常重要的功能。Elasticsearch 提供了多种聚合方式,下面将详细介绍这些聚合类型及其使用方法。 1. 范围聚合(Range Aggregation) 范围聚合允许我们定义一个或多个范围,Elasticsearch 会为这些范围计算…

作者头像 李华
网站建设 2026/5/9 20:55:15

雀魂数据分析工具完整指南:3周从入门到精通

雀魂数据分析工具完整指南&#xff1a;3周从入门到精通 【免费下载链接】amae-koromo 雀魂牌谱屋 (See also: https://github.com/SAPikachu/amae-koromo-scripts ) 项目地址: https://gitcode.com/gh_mirrors/am/amae-koromo 还在为雀魂游戏中的段位停滞不前而烦恼&…

作者头像 李华
网站建设 2026/5/15 0:08:16

终极重复文件清理指南:dupeguru快速释放磁盘空间完整教程

还在为电脑存储空间不足而烦恼吗&#xff1f;重复文件就像磁盘空间的隐形消耗者&#xff0c;悄悄吞噬着你的宝贵存储空间。dupeguru作为一款强大的跨平台重复文件查找工具&#xff0c;能够智能识别并清理所有重复内容&#xff0c;让你的电脑焕然一新。本文将为你提供最全面的du…

作者头像 李华