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. 16.REPL 命令

    转自:http://www.runoob.com/nodejs/nodejs-tutorial.html ctrl + c - 退出当前终端. ctrl + c 按下两次 - 退出 Node REPL ...

  2. C# 向DataTable中插入数据或伪造DataTable

    方法一: DataTable  tblDatas = new DataTable("Datas"); DataColumn dc = null; dc = tblDatas.Col ...

  3. Spring学习总结(11)——Spring JMS MessageConverter介绍

    消息转换器MessageConverter MessageConverter的作用主要有两方面,一方面它可以把我们的非标准化Message对象转换成我们的目标Message对象,这主要是用在发送消息的 ...

  4. Android DiskLruCache全然解析,硬盘缓存的最佳方案

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/28863651 概述 记得在非常早之前.我有写过一篇文章Android高效载入大图. ...

  5. 2. ZooKeeper的ZAB协议。

    转自:https://blog.csdn.net/en_joker/article/details/78662880 ZooKeeper并没有完全采用Paxos算法,而是使用了一种称为ZooKeepe ...

  6. 1.2 Use Cases中 Log Aggregation官网剖析(博主推荐)

    不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Log Aggregation 日志聚合 Many people use Kafka ...

  7. 51Nod——N1082 与7无关的数

    https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1082 题目来源: 有道难题 基准时间限制:1 秒 空间限制:13107 ...

  8. [读书笔记]Java类载入过程

    一. 类的生命周期 类从被载入到虚拟机内存中開始,到卸载出内存为止,有下面(如图)的生命周期: 以上"载入->验证->准备->解析->初始化"称为类的载入过 ...

  9. 1.3 Python基础知识 - 用户交互及传递参数

    一.用户交互 用户交互方面,每种开发语言都有不同的方式,例如shell语言用的是,“read -p "What is  your name ? " ”.python中是什么样子的呢 ...

  10. Lucene 查询方式

    QueryParser类 QueryParser类对输入字符串的解析 格    式 含    义 “David” 在默认的字段中检索“David”关键字 “content:David” 在“conte ...