作者 葛亮
单位 重庆大学
果园采摘了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
代码长度限制
16 KB
时间限制
400 ms
内存限制
128 MB
栈限制
8192 KB
代码实现:
#include <bits/stdc++.h>
using namespace std;
class Apple{
public:
int lan,weight,diameter;
string id;
Apple(int lan_,string id_,int weight_,int diameter_){//为了填入数据
lan=lan_;
id=id_;
weight=weight_;
diameter=diameter_;
}
Apple() : lan(0), id(""), weight(0), diameter(0) {}//为了创建vector容器
};
int main(){
int n;
cin>>n;
vector <Apple> a; //创建Apple类对象的容器
for(int i=0;i<n;i++){
int tlan,twet,tdia;
string tid;
cin>>tlan>>tid>>twet>>tdia;
a.push_back(Apple(tlan,tid,twet,tdia));//填入数据到Apple类对象中
}
vector <int> basket(999999+1);
//创建篮筐容器,代表篮筐的号码(篮筐的范围是[1,999999],从“1”开始用,所以要+1)
for(int i=0;i<n;i++){
basket[a[i].lan]++;//篮筐有物的,号码代表的数就不为0
}
for(int i=0;i<999999+1;i++){
if(basket[i]!=0){//找出篮筐号码代表的数不为0的
int max=0;
int J=0;
for(int j=0;j<n;j++){
if(a[j].lan==i&&a[j].weight>max){//找篮筐中的苹果&一个个确认是否比max重
J=j;
max=a[j].weight;//找到就记录apple号码和重量
}
}
cout<<a[J].lan<<" "<<a[J].id<<" "<<a[J].weight<<" "<<a[J].diameter<<endl;//输出
}
}
return 0;
}
值得一提的是,这里把数据填入apple容器有两种方法:
第一种就是上面的,要设置两种构造函数;
第二种不在类中设置任何构造函数,直接输入,比较简洁:
class Apple{
public:
int lan,weight,diameter;
string id;
// Apple(int lan_,string id_,int weight_,int diameter_){//不需要任何构造函数
// lan=lan_;
// id=id_;
// weight=weight_;
// diameter=diameter_;
// }
// Apple() : lan(0), id(""), weight(0), diameter(0) {}
};
int main(){
int n;
cin>>n;
vector <Apple> a(n); //注意要确定范围防止段错误
for(int i=0;i<n;i++){
cin>>a[i].lan>>a[i].id>>a[i].weight>>a[i].diameter;//直接从输入流填入
// int tlan,twet,tdia;
// string tid;
// cin>>tlan>>tid>>twet>>tdia;
// a.push_back(Apple(tlan,tid,twet,tdia));
}
//其他函数保持原样...