精挑细选

本文介绍了一个通过编程解决特定钢管筛选问题的方法。程序需找到最长、最细且编码最大的钢管。使用了两种不同的实现方式:一种是传统的排序算法,另一种是利用set集合减少复杂度。

题目描述

小王是公司的仓库管理员,一天,他接到了这样一个任务:从仓库中找出一根钢管。这听起来不算什么,但是这根钢管的要求可真是让他犯难了,要求如下: 1、这根钢管一定要是仓库中最长的; 2、这根钢管一定要是最长的钢管中最细的; 3、这根钢管一定要是符合前两条的钢管中编码最大的(每根钢管都有一个互不相同的编码,越大表示生产日期越近)。 相关的资料到是有,可是,手工从几百份钢管材料中选出符合要求的那根…… 要不,还是请你编写个程序来帮他解决这个问题吧。

输入

第一行为一个整数N(1 <= N <= 1000 ),表示仓库中所有钢管的数量。 之后N行,每行三个整数,分别表示一根钢管的长度(以毫米为单位)、直径(以毫米为单位)和编码(一个9位整数)。

输出

只有一个9位整数,表示选出的那根钢管的编码。

样例输入

4
3000 50 872198442
3000 45 752498124
2000 60 765128742
3000 45 652278122

样例输出

752498124
#include <iostream>  
using namespace std;  
int main()  
{  
	struct guan  
	{  
		int n;  
		int m;  
		int y;  
	};  
	int t,i,j;  
	cin >> t;  
	guan a[1100],k;  
	for (i=0;i<t;i++)  
	{  
		cin >> a[i].n >> a[i].m >> a[i].y;  
	} 
	for(i=0;i<t-1;i++) 
	{ 
		for (j=i;j<t;j++) 
		{ 
			if (a[i].n<a[j].n)//第一个要求排序 
			{ 
				k=a[i]; 
				a[i]=a[j]; 
				a[j]=k; 
			} 
			if (a[i].n==a[j].n&&a[i].m>a[j].m)//满足第一个要求的数再第二个要求排序 
			{ 
				k=a[i]; 
				a[i]=a[j]; 
				a[j]=k; 
			} 
			if (a[i].n==a[j].n&&a[i].m==a[j].m&&a[i].y<a[j].y)//满足第一个要求的数再满足第二个要求再第三个要求排序 
			{ 
				k=a[i]; 
				a[i]=a[j]; 
				a[j]=k; 
			} 
		} 
	} 
	cout << a[0].y << endl;  
	return 0;  
}  

  <span style="font-size:24px;color:#ff0000;">重新写过代码,用set实现,减少了双重循环,代码量也相对少了。</span>
<span style="font-size:24px;color:#ff0000;">
</span>
<pre name="code" class="cpp">#include <iostream>
#include <set>
using namespace std;
struct S 
{
	int a;
	int b;
	int c;
}k;
bool operator<(const S& p ,const S& q)
{
	return p.a>q.a || p.a==q.a&&p.b<q.b || p.a==q.a&&p.b==q.b&&p.c>q.c ;
}
int main()
{
	int n,m;
	set<S> str;
	cin >> n;
	while (n--)
	{
		cin >> m;
		while (m--)
		{
			cin >> k.a >> k.b >> k.c ;
			str.insert(k);
		}
		set<S>::iterator it=str.begin();
		cout << it->c << endl;
		str.clear();
	}
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值