NYOJ-精 挑 细 选

题目描述

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

输入

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

输出

对应每组测试数据的输出只有一个9位整数,表示选出的那根钢管的编码,
每个输出占一行

样例输入

2
2
2000 30 123456789
2000 20 987654321
4
3000 50 872198442
3000 45 752498124
2000 60 765128742
3000 45 652278122

样例输出

987654321
752498124

分析:一开始我看这道题,以为是水题。通过结构体排序然后输出排序好的第一个即可。很自信的提交了一发,判题机也很爽快的给我WA掉。原因:输出超限.......

后来发下原因是把部分变量定义为了全局变量,改正之后AC了

#include<stdio.h>
#include<algorithm>
using namespace std;
typedef long long ll;
struct Tube//定义存储管道信息的结构体
{
	ll len,wid,num;//长度,直径,编号
}tube[1000];
bool cmp(Tube a,Tube b)//定义排序方法
{
	if(a.len>b.len)//长的钢管优先在前
	return true;
	else if(a.len==b.len&&a.wid<b.wid)//长度相同时,细的钢管优先在前。
	return true;
	else if(a.len==b.len&&a.wid==b.wid&&a.num>b.num)//长度和直径都相同时编号大的钢管优先在前
	return true;
	else return false;
}
int main(){
    ll t,n,i,j,k;
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld",&n);//输入钢管数量
		for(i=1;i<=n;i++)
		{    //输入钢管长度、直径、编号
			scanf("%lld%lld%lld",&tube[i].len,&tube[i].wid,&tube[i].num);
		}
		sort(tube+1,tube+n+1,cmp);//对钢管进行排序
		printf("%lld\n",tube[1].num);输出符合要求的钢管
	}
}

那么,我们能不能在每次输入时就能对数据进行比较呢?

方法二:

我们可以先定义一个暂存数据用于存取最大数据,然后对每次输入进行比较

#include<stdio.h>
typedef long long ll;
ll len,wid,num,i,j,k,t,n,tlen,twid,tnum;
int main()
{
	scanf("%lld",&t);
	while(t--)
	{
		scanf("%lld",&n);//输入钢管数量
		tlen=0,twid=0,tnum=0;
		for(i=1;i<=n;i++)
		{
			scanf("%lld%lld%lld",&len,&wid,&num);//输入钢管对应的长度、直径、编号
			if(len>tlen||(len==tlen&&wid<twid)||(len==tlen&&wid==twid&&num>tnum))
			{        //直接与暂存数据进行比较
				tlen=len,twid=wid,tnum=num;//符合则更新数据
			}
		}
		printf("%lld\n",tnum);//输入最终符合条件的数据
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
孪生素数是指两个素数之间的差值为2的素数对。通过筛法可以找出给定素数范围内的所有孪生素数的组数。 在引用的代码,使用了递归筛法来解决孪生素数问题。该程序首先使用循环将素数的倍数标记为非素数,然后再遍历素数数组,找出相邻素数之间差值为2的素数对,并统计总数。 具体实现过程如下: 1. 定义一个数组a[N,用来标记数字是否为素数,其N为素数范围的上限。 2. 初始化数组a,将0和1标记为非素数。 3. 输入要查询的孪生素数的个数n。 4. 循环n次,每次读入一个要查询的素数范围num。 5. 使用两层循环,外层循环从2遍历到num/2,内层循环从i的平方开始,将素数的倍数标记为非素数。 6. 再次循环遍历素数数组,找出相邻素数之间差值为2的素数对,并统计总数。 7. 输出总数。 至此,我们可以使用这个筛法的程序来解决孪生素数问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python用递归筛法求N以内的孪生质数(孪生素数)](https://blog.csdn.net/weixin_39734646/article/details/110990629)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [NYOJ-26 孪生素数问题](https://blog.csdn.net/memoryofyck/article/details/52059096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值