华为机试——坐标移动
2016-01-08 15:35
197 查看
题目:.坐标移动
开发一个坐标计算工具,A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件。
输入:
合法坐标为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)
#include<iostream> #include<string> #include<vector> using namespace std; int * Move(int a[],string s)//a[0],a[1]保存横纵坐标 { int flag0,flag1,flag2;//首先判断字符串是否合法 flag0=flag1=flag2=0; if(s.size()>=2 && s.size()<=3) flag0=1; if(flag0) { if(s[0]=='A' ||s[0]=='W'||s[0]=='S'||s[0]=='D') flag1=1; if(flag1) { if( ((s[1]>='0' && s[1]<='9') &&s.size()==2)|| ((s[1]>='0' && s[1]<='9') && (s[2]>='0'&& s[2]<='9') &&s.size()==3)) flag2=1; } } if(flag2) //如果坐标合法 { if(s[0]=='A') a[0]-=atoi(s.substr(1,s.size()-1).c_str()); else if(s[0]=='D') a[0]+=atoi(s.substr(1,s.size()-1).c_str()); else if(s[0]=='W') a[1]+=atoi(s.substr(1,s.size()-1).c_str()); else if(s[0]=='S') a[1]-=atoi(s.substr(1,s.size()-1).c_str()); } return a; } int main() { string str; string::size_type tmp,pos=0; int a[2]={0},x=0,y=0; vector<string> vs; getline(cin,str); while(1) { tmp=pos; pos=str.find(";",pos); vs.push_back(str.substr(tmp,pos-tmp)); if(pos==string::npos)//循环退出 break; pos++; } //for(int i=0;i<vs.size();i++) //测试分解是否成功 // cout<<vs[i]<<endl; for(int i=0;i<vs.size();i++) Move(a,vs[i]); cout<<a[0]<<","<<a[1]<<endl; }
相关文章推荐
- 基于纹理的分割图像
- lazyload.js参数说明
- 使用NSURLSession
- Android窗口抖动之动画实现
- [LeetCode325] Maximum Size Subarray Sum Equals k
- mongodb的复制集实现
- Java中典型的内存泄露问题和解决方法
- Angularjs全局Modal
- 个人对container_of宏的理解
- PHP内置的Web Server的使用
- c#的协变和逆变
- MYSQL 5.7版本修改密码
- linux命令行执行db2存储过程
- HTML5的sessionStorage和localStorage
- 如何让Vim显示dos下的^M符号
- Beginning Android 4 中 Demo Basic/Switch 的问题.
- iOS9 App Thinning(应用瘦身)功能介绍
- 关系型数据库/非关系型数据库
- 【ASP.NET】利用UpdatePanel与ScriptManager完成局部的更新
- 第8章6节MonkeyRunner启动运行过程-启动Monkey 1