php实现  坐标移动

一、总结

一句话总结:伪代码,带函数逻辑,函数这样的方式写算法程序会节约超多的时间。

1、为什么算法题数据输入最好用多组数据输入的方式?

因为都是多组数据测试,而且多组数据输入的方式对单组数据同样不会出错,但是反之就会出错。

所以就while循环加输出后的换行符就好

10 while($str=trim(fgets(STDIN))){
18     echo $mx.','.$my.PHP_EOL;

2、正则表达式的本质是什么?

还是一个字符串,所以要在外面加引号

24     $pattern='/^[ASDW]\d{1,2}$/';

3、正则表达式的行结束符是什么?

是$而不是&符号,php中的$符号

24     $pattern='/^[ASDW]\d{1,2}$/';

4、如何获取A10里面的数字10?

将A用‘0’代替然后将整个intval转成int

33     if($val[0]=='A'){//左
34 $val[0]='0';
35 $step=intval($val);
36 $mx-=$step;

5、bool类型的值echo输出的结果是什么?

true的话输出1,false的话输出空

15         //echo ':'.(String)isFormatedData($val).PHP_EOL;

6、正确编写一个算法程序的思路是什么?

伪代码,带函数逻辑,函数

16         if(isFormatedData($val)) exeStep($val,$mx,$my);

二、坐标移动

题目描述

开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

输入:

合法坐标为A(或者D或者W或者S) + 数字(两位以内)

坐标之间以;分隔。

非法坐标点需要进行丢弃。如AA10;  A1A;  $%$;  YAD; 等。

下面是一个简单的例子 如:

A10;S20;W10;D30;X;A1A;B10A11;;A10;

处理过程:

起点(0,0)

+   A10   =  (-10,0)

+   S20   =  (-10,-20)

+   W10  =  (-10,-10)

+   D30  =  (20,-10)

+   x    =  无效

+   A1A   =  无效

+   B10A11   =  无效

+  一个空 不影响

+   A10  =  (10,-10)

结果 (10, -10)

输入描述:

一行字符串

输出描述:

最终坐标,以,分隔

示例1

输入

复制

A10;S20;W10;D30;X;A1A;B10A11;;A10;

输出

复制

10,-10

代码

 <?php
//分类
/*
算法:
*
1、以分号分割
2、去除里面不合法的数据(可以写一个函数)
3、执行操作,得到答案
*/
while($str=trim(fgets(STDIN))){
$strArr=explode(';',$str);
$mx=0;$my=0;
foreach($strArr as $key=>$val){
//echo $val.PHP_EOL;
//echo ':'.(String)isFormatedData($val).PHP_EOL;
if(isFormatedData($val)) exeStep($val,$mx,$my);
}
echo $mx.','.$my.PHP_EOL;
} function isFormatedData($val){
$pattern='/^[ASDW]\d{1,2}$/';
preg_match($pattern,$val,$matches);
//var_dump($matches);
if($matches) return true;
else return false;
} function exeStep($val,&$mx,&$my){
//$global $mx,$my;
if($val[0]=='A'){//左
$val[0]='0';
$step=intval($val);
$mx-=$step;
}else if($val[0]=='D'){//右
$val[0]='0';
$step=intval($val);
$mx+=$step;
}else if($val[0]=='S'){//下
$val[0]='0';
$step=intval($val);
$my-=$step;
}else if($val[0]=='W'){//上
$val[0]='0';
$step=intval($val);
$my+=$step;
}else{ }
} ?>
 
 

php实现 坐标移动的更多相关文章

  1. C#基础教程/适合初学者

    C#基础教程 第一章       C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序.当 ...

  2. 简谈百度坐标反转至WGS84的三种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...

  3. 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版

    火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...

  4. 页面元素坐标和偏移(clientX/pageX/screenX/layerX/offsetWidth/scrollWidth/clientWidth等)相关整理

    鼠标事件都是在特定位置发生的,我们可以通过event事件对象的各种属性来获得事件发生的坐标位置,有相对于视口的,有相对于整个文档的,同样页面元素的位置也有相对视口的,也有滚动后的,这些都比较容易混淆, ...

  5. JavaScript中尺寸、坐标

    测试环境是IE8,Chrome38,Firefox40,下面是全局通用脚本打印代码 /** * 打印 */ function write(str) { document.write(str + '&l ...

  6. “为什么DirectX里表示三维坐标要建一个4*4的矩阵?”

    0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...

  7. 微信JS-SDK坐标位置转换为百度地图坐标

    微信JS-SDK开发过程中,使用getLocation获取坐标位置,如何将微信获取的坐标直接应用到百度地图中,显示以下效果: 说明:红色图标是从微信转换过来的位置,蓝色图标是周边位置.首先从微信开发流 ...

  8. (九)Maven坐标详解

    Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等.为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就 ...

  9. monkeyrunner之坐标或控件ID获取方法-续

    在之前的文章中,介绍过控件坐标和ID的获取方法,这里,我们再介绍一个新的工具-uiautomatorviewer. Uiautomatorviewer是Android sdk自带的工具,位置在sdk/ ...

  10. 使用Proj库进行大地坐标转空间坐标、投影坐标的一个示例

    最近研究了proj库的使用,自己写了一个小demo,仅供参考. void demoPROJ() { const char* wgs84 = "+proj=tmerc +ellps=WGS84 ...

随机推荐

  1. TC快速搜索在win10下不可用

    今天突然发现TC的快速搜索在win10下突然不可用,按Ctrl + s 呼出快速搜索栏后半天不响应也无法输入文字.论坛里给出来的建议是将 QuickSearch 2.2.3 升级到 2.2.6,目前插 ...

  2. Linux系列-安装经常使用软件

    安装JDK: 理论篇: 一.下载JDK 二.安装 ①复制到/usr/java/路径下 [plain] view plaincopy #mkdir /usr/java/ #cp jdk-7u25-lin ...

  3. 10. Spring Boot JDBC 连接数据库

    转自:https://blog.csdn.net/catoop/article/details/50507516

  4. 1.1 Introduction中 Kafka as a Messaging System官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Kafka as a Messaging System kafka作为一个消息系统 ...

  5. nodeJS+socket.io传递消息

    服务器端 安装express,socket.io npm install express --save-dev npm install socket.io --save app.js const ex ...

  6. 转载的:Python os 和 os.path模块详解

    os.getcwd()获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curdi ...

  7. uiautomator_python使用汇总

    1.判断按钮状态 if d(resourceId="id",enabled=False): #判断当前按钮是否为未激活状态,为True则为激活状态2.获取toast提示语 d.to ...

  8. 【组件】微信小程序input搜索框的实现

    开发小程序的过程,是一个学习知识,解决问题的过程,每当实现了一个需求,总会有很大的成就感,每天记录一个开发过程中的细节.实现效果如下: 官方参考链接:https://developers.weixin ...

  9. vc如何让打开的子窗口默认是最大化的

    vc如何让打开的子窗口默认是最大化的 浏览: 3554 | 更新: 2011-04-09 17:04 1 0     加入杂志加入杂志 摘要:关于vc如何让打开的子窗口默认是最大化的深入研究.   步 ...

  10. 编程之路-client学习知识点纲要(Web/iOS/Android/WP)

    Advanced:高级内容 Architect:架构设计 Core:框架底层原理分析 Language:框架经常使用语言 Objective-C Dart Swift Java Network:网络 ...