YACS(上海计算机学会竞赛平台)2023年12月月赛——移动复位

发布时间:2024年01月05日

移动复位

内存限制:?256?Mb时间限制:?1000?ms

题目描述

二维平面上有一个点。该点最初所在的位置称之为起点。接下来,该点接受了一串命令,每个命令可以用一个大写字母表示:

  • R?表示该点沿 X 轴坐标正方向移动了一个单位;
  • L?表示该点沿 X 轴坐标负方向移动了一个单位;
  • U?表示该点沿 Y 轴坐标正方向移动了一个单位;
  • D?表示该点沿 Y 轴坐标负方向移动了一个单位。

执行完这些指令后,该点不一定回到起点。请计算至少需要增加多少条指令,才能让这个点回到起点?如果该点已经到达起点,则输出?0。

输入格式
  • 单个字符串:表示给定的指令序列
输出格式
  • 单个整数:表示最少还需添加最少指令才能回到起点。
数据范围
  • 字符数量不超过?100000
样例数据
输入1:

LRUD

输出1:

0

输入2:

LLUU

输出2:

4

思考过程

可以运用初中的知识:

1.平面直角坐标系相当于两个互相垂直的数轴

2.绝对值可以表示距离(表示方法:|0-x|

——————————————————————————

L相当于x-1,R相当于x+1,U相当于y+1,D相当于y-1

操作完上下左右后,最后的答案就是\left | 0-x \right |+\left | 0-y \right |

代码实现
#include <bits/stdc++.h>
using namespace std;
int x, y;

int main() {
	string s;
	cin >> s;
	for (int i = 0; i < s.length(); i++) {
		if (s[i] == 'R')
			x++;
		if (s[i] == 'L')
			x--;
		if (s[i] == 'U')
			y++;
		if (s[i] == 'D')
			y--;
	}
	cout << abs(0 - x) + abs(0 - y);
	return 0;
}

文章来源:https://blog.csdn.net/A3024857/article/details/135400146
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。