华为OJ(坐标移动)
2015-08-28 15:32
281 查看
描述 | 开发一个坐标计算工具, 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) |
---|---|
知识点 | 字符串 |
运行时间限制 | 0M |
内存限制 | 0 |
输入 | 一行字符串 |
输出 | 最终坐标,以,分隔 |
样例输入 | A10;S20;W10;D30;X;A1A;B10A11;;A10; |
样例输出 | 10,-10 |
#include<iostream> #include<string> using namespace std; int main() { string s,tmp,move_str; int move_num; getline(cin,s); int x=0,y=0,pos=0; while(!s.empty()) { pos=s.find(';'); tmp=s.substr(0,pos); s=s.substr(pos+1); if(tmp.size()>=2&&tmp.size()<=3) { move_str=tmp.substr(1); move_num=atoi(move_str.c_str()); if((tmp.size()==2&&isdigit(move_str[0]))||(tmp.size()==3&&isdigit(move_str[0])&&isdigit(move_str[1]))) { if(tmp[0]=='A') x-=move_num; else if(tmp[0]=='S') y-=move_num; else if(tmp[0]=='W') y+=move_num; else if(tmp[0]=='D') x+=move_num; } } } cout<<x<<","<<y<<endl; //system("pause"); return 0; }
相关文章推荐
- java实现ping ip地址
- zzuli OJ 1013: 求两点间距离
- ubuntu上安装mysql以及简单实验
- oracle 定时job
- Spring定时任务
- UE使用
- svn
- 调用webservice的方式解析
- 随笔小录
- CentOS 6.5 安装 Nginx 1.7.8 教程
- 1080. Graduate Admission (30)
- iOS5系统API和5个开源库的JSON解析速度测试
- 刘备学Android目录
- MPLAB PICKIT3、MPLAB SIM调试
- 性别和教育:先天加上后天【经济学人】
- zzuli OJ 1012: 求绝对值
- java json
- 1080. Graduate Admission (30)
- 性别和教育:先天加上后天【经济学人】
- 移动API-restful的设计原则和参考