列表

详情


HJ17. 坐标移动

描述

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

输入:

A10;S20;W10;D30;X;A1A;B10A11;;A10;

输出:

10,-10

示例2

输入:

ABC;AKL;DA1;

输出:

0,0

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 1ms, 内存消耗: 344KB, 提交时间: 2021-09-08

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct pos
{
	int x;
	int y;
};
struct pos cur = {0,0};
void move(char *p)
{
	char dir = p[0];
	int n1=0, n2=0, d=0, len;
	
//	printf("%s\n",p);
	len = strlen(p);
	if(len>3)
		return;

	if(p[1]>='0' && p[1]<='9')
		n1 = p[1] - '0';
	else
		return;
	
	if(p[2]!=0)
	{
		if(p[2]>='0' && p[2]<='9')
			n2 = p[2] - '0';
		else
			return;
	}

	if(p[2]!=0)
		d = n1*10+n2;
	else
		d = n1;
	switch(dir)
	{
		case 'A':
		cur.x -= d;
		break;
		
		case 'D':
		cur.x += d;
		break;
		
		case 'W':
		cur.y += d;
		break;
		
		case 'S':
		cur.y -= d;
		break;
		
		default:
		break;
	}
//	printf("%d,%d\n",cur.x, cur.y);
}
int main()
{
	char op[100] = {0};
	char str[2000] = {0};
	int i,j,v,len;
	while(scanf("%s", str)!=EOF)
	{
		len = strlen(str);
		i = 0;
		while(i<len)
		{
			memset(op, 0, 100);
			j = 0;
			while(str[i]!=';' && i<len)
			{
				if(j<100)
					op[j++] = str[i++];
			}
			i++;
			move(op);
		}
		printf("%d,%d\n",cur.x, cur.y);
	}
	return 0;
}

C 解法, 执行用时: 1ms, 内存消耗: 348KB, 提交时间: 2021-09-09

#include<stdio.h>
#include<string.h>

int main(){
    char s[2048],*p,c,tmp[100];
    int len,x=0,y=0,n;
    fgets(s,2048,stdin);
    len=strlen(s)-1;
    s[len]='\0';
    p=strtok(s,";");
    while(p!=NULL){
        if(strlen(p)<=3&&sscanf(p, "%c%d%s",&c,&n,tmp)==2){
            switch(c){
                case 'A':
                    x-=n;
                    break;
                case 'S':
                    y-=n;
                    break;
                case 'W':
                    y+=n;
                    break;
                case 'D':
                    x+=n;
                    break;
            }
        }
        p=strtok(NULL,";");
    }
    printf("%d,%d",x,y);
}

上一题