您的位置:首页 > 其它

华为OJ(坐标移动)

2016-11-18 21:36 344 查看
描述

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

我用的笨方法没用C++的字符串库。而且第一次还把ch字符数组开太小了,一直无法AC。并且题中说明坐标值是两位数以内的。

#include <iostream>

#include<string.h>

using namespace std;

int IsRight(char *p,int k)  //判断提取的坐标是否合法,不合法返回0,合法返回坐标值

{

    int x=0;

    if(k==1)

        {return 0;}

    else if(k==2)

    {

        if(p[0]=='A'||p[0]=='D'||p[0]=='W'||p[0]=='S')

        {

            if(p[1]>='0'&&p[1]<='9')

            {

                return p[1]-'0';

            }

            else

                return 0;

        }

        else

            return 0;

    }

    else if(k==3)

    {

        if(p[0]=='A'||p[0]=='D'||p[0]=='W'||p[0]=='S')

        {

            if(p[1]>='0'&&p[1]<='9')

            {

                x=(p[1]-'0')*10;

            }

            else

                return 0;

            if(p[2]>='0'&&p[2]<='9')

            {

                x=x+(p[2]-'0');

                return x;

            }

            else

                return 0;

        }

        else

            return 0;

    }

    else

    {

        return 0;

    }

}

void fuzhi(char *p,int &a,int &b,int k) //对坐标进行处理

{

    int i=0;

    i=IsRight(p,k);

    if(i==0)

4000

    {

        return ;

    }

    switch(p[0])

    {

        case 'A': a=a-i; break;

        case 'D': a=a+i; break;

        case 'W': b=b+i; break;

        case 'S': b=b-i; break;

        default:return;

    }

}

int main()

{

    int x=0,y=0,k=0;

    char s[100];

    char ch[100];

    //memset(s,0,strlen(s));

    memset(ch,0,strlen(ch));

    cin>>s;

    for(unsigned int i=0;i<strlen(s);i++)

    {

        if(s[i]==';')

        {

            fuzhi(ch,x,y,k);

           // cout<<ch;

            memset(ch,0,strlen(ch));

            k=0;

        }

        if(s[i]!=';')

        {

            ch[k]=s[i];

            k++;

        }

    }

    cout<<x<<","<<y<<endl;

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: