• 坐标移动


    题目描述

    开发一个坐标计算工具, 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)

    Analysis:

    1 分割字符串

    2 判断分割后的字符串坐标是否合法

    3对合法的字符串坐标判断方向,并将字符串中的数字提取出来,在前面的坐标基础上进行运算

    4 确定运算规则:初始坐标(x,y)

    字符串为A num===》x-=num
    字符串为S num===》y-=num
    字符串为W num===》y+=num
    字符串为D num===》x+=num
     
    codes:
     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 int main()
     4 {
     5     string str;
     6     while(cin>>str)
     7     {
     8         pair<int,int> point(0,0);
     9         size_t found=str.find_first_of(';');
    10         int start=0;
    11 
    12         while(found!=string::npos)
    13         {
    14             string s1=str.substr(start,found-start);
    15             start=found+1;
    16             found=str.find_first_of(';',found+1);
    17 
    18             if(s1.size()>1 && s1.size()<=3)
    19             {
    20                 char c=s1[0];
    21                 int n=0;
    22                 int invalid=0;
    23                 for(int i=1;i<s1.size();i++)
    24                 {
    25                     if(s1[i]>='0' && s1[i]<='9') n=n*10+(s1[i]-'0');
    26                     else {
    27                         invalid=1;
    28                         break;
    29                     }
    30                 }
    31                 if(invalid==0){
    32                     switch(c)
    33                     {
    34                         case 'A':{point.first-=n;break;}
    35                         case 'D':{point.first+=n;break;}
    36                         case 'W':{point.second+=n;break;}
    37                         case 'S':{point.second-=n;break;}
    38 
    39                     }
    40                 }
    41             }
    42             //cout<<point.first<<','<<point.second<<endl;
    43         }
    44         cout<<point.first<<','<<point.second<<endl;
    45     }
    46     return 0;
    47 }
  • 相关阅读:
    通用测试用例(转载)
    微信小程序开发-使用阿里巴巴矢量图标
    flask框架启服务+json格式入参+postman获取上个接口的token作为下个接口的入参+关联接口【多测师_王sir】
    this.$set的正确使用
    vue中异步函数async和await的用法
    Tornado 异步协程coroutine原理
    nvm安装配置
    python基础
    数组for循环方法总结
    react 之props传值
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11213634.html
Copyright © 2020-2023  润新知