1082 射击比赛 (20 分)

本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军;谁差得最远,谁就是菜鸟。本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟。我们假设靶心在原点(0,0)。

输入格式:

输入在第一行中给出一个正整数 N(≤ 10 000)。随后 N 行,每行按下列格式给出:

ID x y

其中 ID 是运动员的编号(由 4 位数字组成);x 和 y 是其打出的弹洞的平面坐标(x,y),均为整数,且 0 ≤ |x|, |y| ≤ 100。题目保证每个运动员的编号不重复,且每人只打 1 枪。

输出格式:

输出冠军和菜鸟的编号,中间空 1 格。题目保证他们是唯一的。

输入样例:

3
0001 5 7
1020 -1 3
0233 0 -1
结尾无空行

输出样例:

0233 0001
结尾无空行

解题思路:

Tips:原点与点(x , y)之间的距离可以这样计算:sqrt( x * x + y * y)
对于vector数组nums
最大值: *max_element(nums.begin(),nums.end())
最小值: *min_element(nums.begin(),nums.end())

正常思路(对于本题正常思路行不通,可忽略本段):
此时,相信你一定会想到把输入的 id 当成数组的下标把 x * x + y * y 的值作为相应下标的值,然后得出数组的最值,循环数组并找到与最值对应的下标并输出即可。
但这种方法在这种题上是不可行的,因为这样的话你必须初始化数组的值:
①初始化为0,本题中 x * x + y * y 的最小值是可以为 0 的,那么此时数组的下标可能并没有循环到 id 就已经有被数组的其他下标给代替了,答案极有可能错误
②初始化为负数,那么最小值就为负数,而 x * x + y * y 的值是不可能为负数的,对应下标就永远不可能是输入的 id

正确思路:
我们应该利用结构体来进行升序排序,排序好以后直接输出结构体数组的第 0 位和最后一位的 id

代码示例:

#include <iostream>
#include <iomanip>
#include <vector>
#include <algorithm>using namespace std;struct st
{string id;int x, y;
};bool Sort(st s1, st s2) //对结构体升序排序
{return (s1.x * s1.x + s1.y * s1.y) < (s2.x * s2.x + s2.y * s2.y);
}int main()
{int n;cin >> n;vector<st> ans; //创建结构体数组for (int i = 0; i < n; i++){st temp;cin >> temp.id >> temp.x >> temp.y;ans.push_back(temp);}sort(ans.begin(), ans.end(), Sort); //排序//直接输出结构体数组的第 0 位和最后一位的 idcout << ans[0].id << " " << ans[ans.size() - 1].id << endl;
}

运行结果:

PTA 1082 射击比赛 (20 分) C++实现相关推荐

  1. C++学习之路 | PTA乙级—— 1082 射击比赛 (20 分)(精简)

    1082 射击比赛 (20 分) 本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我 ...

  2. 1082 射击比赛 (20 分)

    1082 射击比赛 (20 分) 本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我 ...

  3. 【简便代码】1082 射击比赛 (20分)_17行代码AC

    立志用更少的代码做更高效的表达 PAT乙级最优题解-->传送门 本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x, ...

  4. 1082 射击比赛 (20分)

    本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...

  5. 【PAT乙级】1082 射击比赛 (20分)

    本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...

  6. 【PAT乙级】1082 射击比赛 (20 分)

    题目地址 #include<cstdio> #include<iostream> #include<cmath> using namespace std; int ...

  7. 1082. 射击比赛 (20)

    1082. 射击比赛 (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 本题目给出的射击比赛的规则非常简单 ...

  8. PAT 1082. 射击比赛 (20) - 乙级

    本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军:谁差得最远,谁就是菜鸟.本题给出一系列弹洞的平面坐标(x,y),请你编写程序找出冠军和菜鸟.我们假设靶心在原点(0,0). 输入 ...

  9. 用python来解 PAT乙级1082射击比赛 -20-满分

    题意很简单,输入运动员的编号和射出箭的坐标,对比他们到圆心的距离,输出最近的(冠军)和最远的(菜鸟)编号 直接用求三角形最长边的计算公式对每一个坐标求距离,先设两个常量分别是0和200(任意设置一个不 ...

最新文章

  1. VINS-Mono:一种鲁棒且通用的单目视觉惯性系统
  2. JQuery:JQuery捕获HTML
  3. COMET彗星(三)构建自己的COMET核心
  4. 【Verilog HDL】从逻辑电路图到门级建模——人工翻译的方法论
  5. webpack代理解决跨域
  6. trackbar控件显示刻度值_安卓自定义电平流图形控件
  7. Web API应用架构在Winform混合框架中的应用(3)--Winfrom界面调用WebAPI的过程分解...
  8. jQuery DataTables: How to add a checkbox column
  9. java提取省市县乡镇村
  10. 【April Fools Day Contest 2014F】【愚人节脑洞 OEIS大法】000001 输出序列某一项
  11. nexus下载及上传jar包
  12. 小程序毕设作品之微信校园维修报修小程序毕业设计成品(7)中期检查报告
  13. python3项目源代码下载_资源整理 | 36个惊人的Python开源项目,都在这了
  14. android 电视 vob格式转换,Android手机、Android智能电视、Android平板电脑视频和音频转换器---佳佳安卓视频格式转换器...
  15. 有哪些计算机语言可以爬虫,爬虫是干嘛的?用什么语言学爬虫好?
  16. 通过zCloud实现数据库故障的“1-3-5”一站式高效处理
  17. IMEI、iccid、MDN、MSIN、IMSI
  18. 12步解N-S方程之第五步(2)
  19. 【Educoder作业】问题求解——进制
  20. 基于SpringBoot的大学生租房系统

热门文章

  1. python蓝桥杯 成绩统计
  2. Spring Boot开发中,经常听到的PO、VO、DAO、BO、DTO、POJO到底是什么?
  3. HDMI1.4 硬件设计简介
  4. 淘宝营销系统 - 达摩盘快捷操作流程
  5. Sklearn学习笔记3 model_selection模块
  6. sklearn.model_selection
  7. 蓝桥 奖券数目 JAVA解法
  8. vue1升级vue2踩坑指南
  9. SpringCloud Alibaba——精读Nacos+CMDB+核心源码阅读(7w字长篇)
  10. 计算机二级密码不正确的是什么情况,方法不对努力白费:计算机二级备考正确方向是什么...