C++实现挑选苹果(PTA)

作者 葛亮

单位 重庆大学

果园采摘了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));
	}
    //其他函数保持原样...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值