php实现 坐标移动
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)
输入描述:
一行字符串
输出描述:
最终坐标,以,分隔
代码
<?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实现 坐标移动的更多相关文章
- C#基础教程/适合初学者
C#基础教程 第一章 C#语言基础 本章介绍C#语言的基础知识,希望具有C语言的读者能够基本掌握C#语言,并以此为基础,能够进一步学习用C#语言编写window应用程序和Web应用程序.当 ...
- 简谈百度坐标反转至WGS84的三种思路
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1.背景 基于百度地图进行数据展示是目前项目中常见场景,但是因为百度地图 ...
- 火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版
火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...
- 页面元素坐标和偏移(clientX/pageX/screenX/layerX/offsetWidth/scrollWidth/clientWidth等)相关整理
鼠标事件都是在特定位置发生的,我们可以通过event事件对象的各种属性来获得事件发生的坐标位置,有相对于视口的,有相对于整个文档的,同样页面元素的位置也有相对视口的,也有滚动后的,这些都比较容易混淆, ...
- JavaScript中尺寸、坐标
测试环境是IE8,Chrome38,Firefox40,下面是全局通用脚本打印代码 /** * 打印 */ function write(str) { document.write(str + '&l ...
- “为什么DirectX里表示三维坐标要建一个4*4的矩阵?”
0x00 前言 首先要说明的是,本文的标题事实上来自于知乎上的一个同名问题:为什么directX里表示三维坐标要建一个4*4的矩阵? - 编程 .因此,正如Milo Yip大神所说的这个标题事实上是存 ...
- 微信JS-SDK坐标位置转换为百度地图坐标
微信JS-SDK开发过程中,使用getLocation获取坐标位置,如何将微信获取的坐标直接应用到百度地图中,显示以下效果: 说明:红色图标是从微信转换过来的位置,蓝色图标是周边位置.首先从微信开发流 ...
- (九)Maven坐标详解
Maven的一个核心的作用就是管理项目的依赖,引入我们所需的各种jar包等.为了能自动化的解析任何一个Java构件,Maven必须将这些Jar包或者其他资源进行唯一标识,这是管理项目的依赖的基础,也就 ...
- monkeyrunner之坐标或控件ID获取方法-续
在之前的文章中,介绍过控件坐标和ID的获取方法,这里,我们再介绍一个新的工具-uiautomatorviewer. Uiautomatorviewer是Android sdk自带的工具,位置在sdk/ ...
- 使用Proj库进行大地坐标转空间坐标、投影坐标的一个示例
最近研究了proj库的使用,自己写了一个小demo,仅供参考. void demoPROJ() { const char* wgs84 = "+proj=tmerc +ellps=WGS84 ...
随机推荐
- 17.Node.js 回调函数--异步编程
转自:http://www.runoob.com/nodejs/nodejs-tutorial.html Node.js 异步编程的直接体现就是回调. 异步编程依托于回调来实现,但不能说使用了回调后程 ...
- 10.查看npm安装信息和版本号
转自:http://www.runoob.com/nodejs/nodejs-express-framework.html 你可以使用以下命令来查看所有全局安装的模块: $ npm list -g ├ ...
- 2.Xml与多个对象的映射(聚合或组合)及注意事项
在我们的实际应用中,Xml中的结构往往不止这么简单,一般都会有2,3层.也就是说如果映射成对象就是聚合(组合)的情况 . 就用我们上一章的例子继续来讲,简单我们的Book的author现在不止是一个S ...
- dropdown下拉菜单
<!--声明方式的下拉菜单:三个要点--> <!--1 外围容器用dropdown包裹--> <!--2 内部点击事件data-toggle--> <!--3 ...
- Java学习笔记四
1.简介.进程和线程:简单的说就是进程负责为程序开辟内存空间,线程负责具体的执行单元(执行路径). 一个进程中可以有多个执行路径,称为多线程.CPU一次只能执行一个进程,但是一个进程内部可以有多个线程 ...
- Java学习笔记三.2
5.继承 //Java中所有对象都显式/隐式的继承子Object类 class fu{ fu(){ System.out.println("fu..."+getNum()); sh ...
- oracle 日期
http://blog.itpub.net/126211/viewspace-712986/
- “ping”命令的原理就是向对方主机发送UDP数据包,HTTP在每次请求结束后都会主动释放连接,因此HTTP连接是一种“短连接”
Socket 是一套建立在TCP/IP协议上的接口不是一个协议 应用层: HTTP FTP SMTP Web 传输层: 在两个应用程序之间提供了逻辑而不是物理的通信(TCP UDP) T ...
- 1.2 Use Cases中 Website Activity Tracking官网剖析(博主推荐)
不多说,直接上干货! 一切来源于官网 http://kafka.apache.org/documentation/ Website Activity Tracking 网站活动追踪 The origi ...
- 利用Socket进行大文件传输
分类: WINDOWS 最近接触到利用socket进行大文件传输的技术,有些心得,与大家分享.首先看看这个过程是怎么进行的(如下图): 所以,我们需要三个socket在窗体加载的时候初始化: ...