zoukankan      html  css  js  c++  java
  • 坐标移动

    题目描述

    开发一个坐标计算工具, 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 }
  • 相关阅读:
    关于页面元素不可见的几种方法
    关于a标签点击禁止的
    v-bind 的作用 以及:key的作用
    v-model双向绑定的原理
    es6之babel
    父子组件之间的传参
    组件名学习
    PreparedStatement執行sql語句
    Statement执行DQL语句(查询操作)
    MySQL 插入数据时,中文乱码???问题的解决
  • 原文地址:https://www.cnblogs.com/dragondragon/p/11213634.html
Copyright © 2011-2022 走看看