坐标移动

坐标移动

题目

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

思路

重点判断输入数据是否合法,通过结构存储方便记录方向和距离。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#pragma warning(disable : 4996)
int ap(char a) //判断方向的函数
{
switch (a) {
case 'A':return 1;
case 'D':return 2;
case 'W':return 3;
case 'S':return 4;
default:return 0;
}
}
int main(void)
{

char bit[10000];
struct sd {
int number ;
int i;
}club[5000]; //使用结构存储 number为距离,i为方向
while(gets(bit)!=NULL)
{
int i, j, k, sum1 = 0, sum2 = 0;
for (i = 0, j = 0; i < strlen(bit) - 2; i++)
if (ap(bit[i]))
if (isdigit(bit[i + 1]))
if (isdigit(bit[i + 2]) && bit[i + 3] == ';') //是否合法
{
club[j].number = (10 * (bit[i+1] - '0') + (bit[i+2] - '0'));
club[j].i = ap(bit[i]);
j++;
}
else if (bit[i+2] == ';')
{
club[j].number = (bit[i+1] - '0');
club[j].i = ap(bit[i]);
j++;
}
else while (bit[i] != ';')
i++;
else while (bit[i] != ';')
i++;
else while (bit[i] != ';')
i++;
for (i = 0; i < j; i++) //计算距离
{
if (club[i].i == 1)
sum1 -= club[i].number;
if (club[i].i == 2)
sum1 += club[i].number;
if (club[i].i == 3)
sum2 += club[i].number;
if (club[i].i == 4)
sum2 -= club[i].number;
}
printf("%d,%d\n", sum1, sum2);}
return 0;
}

反思

打赏
  • 版权声明: 本博客所有文章除特别声明外,均采用 Apache License 2.0 许可协议。转载请注明出处!
  • © 2020 lsengard
  • PV: UV:

请我喝杯咖啡吧~

支付宝
微信