做网站的协议,外贸公司的网站建设,wordpress主题柚子皮,在京东上怎样做网站目录
题目部分
解读与分析
代码实现 题目部分
题目最远足迹难度易题目说明某探险队负责对地下洞穴进行探险。 探险队成员在进行探险任务时#xff0c;随身携带的记录器会不定期地记录自身的坐标#xff0c;但在记录的间隙中也会记录其他数据。探索工作结束后#xff0c;…目录
题目部分
解读与分析
代码实现 题目部分
题目最远足迹难度易题目说明某探险队负责对地下洞穴进行探险。 探险队成员在进行探险任务时随身携带的记录器会不定期地记录自身的坐标但在记录的间隙中也会记录其他数据。探索工作结束后探险队需要获取到某成员在探险过程中相对于探险队总部的最远的足迹位置。 1. 仪器记录坐标时坐标的数据格式为(x,y)如(1,2)、(100,200)其中0x10000y1000。同时存在非法坐标如(01,1)、(1,01)(0,100)属于非法坐标。如果 x 0 y 0 或者 x、y 值存在前导 0 首位为 0则认为坐标不合法。笔者注2. 设定探险队总部的坐标为(0,0)某位置相对总部的距离为x * x y * y。 3. 若两个座标的相对总部的距离相同则第一次到达的坐标为最远的足迹。 4. 若记录仪中的坐标都不合法输出总部坐标0,0。 备注不需要考虑双层括号嵌套的情况比如sfsdfsd((1,2))。输入描述字符串表示记录仪中的数据。 如ferga13fdsf3(100,200)f2r3rfasf(300,400)输出描述字符串表示最远足迹到达的坐标。 如 (300,400)补充说明无------------------------------------------------------示例示例1输入ferg(3,10)a13fdsf3(3,4)f2r3rfasf(5,10)输出(5,10)说明记录仪中的合法坐标有3个 (3,10) (3,4) (5,10)其中(5,10)是相距总部最远的坐标 输出(5,10)。示例2输入asfefaweawfaw(0,1)fe输出(0,0)说明记录仪中的坐标都不合法输出总部坐标(0,0) 解读与分析
题目解读
此题要求从输入字符串中过滤出所有合法的坐标计算出最远坐标并输出它。合法坐标的意思是 1. 首字母是(尾字母是)中间是两个数字用, 隔开。 2. 两个数字的首位都不能为 0数字不能等于0而且大于0的数字不能有前导 0。 如果不存在合法坐标则输出 (0,0)。
本题题干关于坐标合法没有明确的说只能通过题目的样例总结。 一个好的题目应该使用概括的语言描述合法或不合法的情况然后举例说明。否则举例如果不能覆盖所有的场景将会产生歧义。
分析与思路
先设置两个变量 1. maxPosition 字符串类型用以记录最远的坐标初始值为 (0,0)。 2. maxDistance整形数字记录最远的距离初始值为0。
遍历字符串在遍历字符串的过程中找到一个合法坐标后计算其到总部的距离设为 tmpDistance如果 tmpDistance 大于 maxDistance则把它赋值给 maxDistance并把把它坐标赋值给 maxPosition。继续遍历字符串寻找下一个合法坐标循环判断到总部距离直到字符串结束。
在计算到总部的距离时假设坐标为 (x,y) 则距离为 sqrt( x * x y * y )。由于此题只关心坐标的相对距离不需要绝对值所以可以使用 x * x y * y 代替其平方根值进行比较以减少计算量。
代表合法坐标的字符串在去除首位的小括号后必须满足如下条件 1. 中间某个位置既不是首字母也不是尾字母包含字符,。 2. 通过分隔符 , 分开为 2 个字符串这两个字符串首字母不为 0且都能解析成正整数。
此算法只需要遍历一次字符串时间复杂度为 O(n)使用了 2 个额外的原始数据类型变量空间复杂度为 O(1)。 代码实现
Java代码
import java.util.Scanner;/*** 最远足迹* * since 2023.09.07* version 0.1* author Frank**/
public class MaxDistance {public static void main(String[] args) {Scanner sc new Scanner(System.in);String record sc.nextLine();int i 0;int maxDistance 0;String maxPosition (0,0);while (i record.length()) {int leftPT record.indexOf((, i);int rightPT record.indexOf(), i);if (leftPT 0) {break;}String position record.substring(leftPT 1, rightPT);int tmpDistance getDistance(position);if (tmpDistance maxDistance) {maxDistance tmpDistance;maxPosition ( position );}i rightPT 1;}System.out.println(maxPosition);}private static int getDistance(String position) {int ret 0;String[] posArr position.split(,);if (posArr null || posArr.length ! 2) {return 0;}for (int i 0; i posArr.length; i) {String strPos posArr[i];if (strPos.length() 0 || strPos.startsWith(0)) {return 0;}try {int intPos Integer.parseInt(strPos);ret (intPos * intPos);} catch (NumberFormatException e) {return 0;}}return ret;}}JavaScript代码
const rl require(readline).createInterface({ input: process.stdin });
var iter rl[Symbol.asyncIterator]();
const readline async () (await iter.next()).value;function getDistance( position ) {var ret 0;var posArr position.split(,);if (posArr null || posArr.length ! 2) {return 0;}for (var i 0; i posArr.length; i) {var strPos posArr[i];if (strPos.length 0 || strPos.startsWith(0)) {return 0;}var intPos Number(strPos);if( Number.isNaN( intPos) ){return 0;}ret (intPos * intPos);}return ret;
}function processInput( line )
{var record line;var i 0;var maxDistance 0;var maxPosition (0,0);if( !record ){console.log(maxPosition);return;}while (i record.length) {var leftPT record.indexOf((, i);var rightPT record.indexOf(), i);if (leftPT 0) {break;}var position record.substring(leftPT 1, rightPT);var tmpDistance getDistance(position);if (tmpDistance maxDistance) {maxDistance tmpDistance;maxPosition ( position );}i rightPT 1;}console.log(maxPosition);
}void async function() {let input [];while (line await readline()) {processInput( line );}}();
(完)