news 2026/4/18 13:12:31

挑选苹果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/4/18 11:56:59

23、Eclipse应用开发与自动化测试全解析

Eclipse应用开发与自动化测试全解析 1. Eclipse应用与产品构建基础 Eclipse运行时由多个特性组构成,而每个特性组又包含多个插件。这些插件所在的应用被称为产品。产品具有顶级品牌标识,决定应用的名称,并协调代码运行的平台,确保包含必要的特定操作系统功能。无论是Ecli…

作者头像 李华
网站建设 2026/4/18 10:49:46

32、Elasticsearch集群管理与监控指南

Elasticsearch集群管理与监控指南 1. 快照仓库的创建 快照能够保存集群从开始创建快照那一刻起的所有相关数据,其中包含集群状态和索引的信息。在创建快照(至少是第一个快照)之前,必须先创建一个快照仓库。每个仓库都通过其名称来识别,并且需要定义以下方面: - 名称 …

作者头像 李华
网站建设 2026/4/18 9:15:04

31、使用 OSGi 服务动态连接应用程序(上)

使用 OSGi 服务动态连接应用程序(上) 在软件开发中,动态服务的使用能够让应用程序更加灵活和健壮。OSGi(Open Services Gateway Initiative)提供了一系列机制来实现服务的动态管理,下面将详细介绍如何使用 OSGi 服务来动态连接应用程序。 动态服务概述 OSGi 规范定义了…

作者头像 李华
网站建设 2026/4/18 3:30:28

Platinum-MD终极指南:3步搞定NetMD音乐传输

Platinum-MD终极指南&#xff1a;3步搞定NetMD音乐传输 【免费下载链接】platinum-md Minidisc NetMD Conversion and Upload 项目地址: https://gitcode.com/gh_mirrors/pl/platinum-md Platinum-MD是一款专为MiniDisc爱好者设计的现代化NetMD管理工具&#xff0c;让您…

作者头像 李华