蓝桥杯题目----机器人移动

本文探讨了在笛卡尔坐标系中,机器人从一点移动到另一点后,向右转90度并继续前进时,如何计算其最先经过的整点坐标。通过分析向量和最大公约数的概念,提供了一种有效的方法来确定这一坐标。
描述

假设一个机器人在笛卡尔坐标系上。它从(X1, Y1)移动到了(X2, Y2),然后向右转90度,继续前进。  

请你计算这个机器人继续前进过程中最先经过的整点是哪一个?
输入

四个整数X1, Y1, X2, Y2。

-1000000 ≤ X1, Y1, X2, Y2 ≤ 1000000 保证(X1, Y1)和(X2, Y2)是不同的点。
输出

两个整数X和Y代表最先经过的整点坐标。
样例输入

    0 0 1 2

样例输出

    3 1

数学题,提示:一条向量(x,y)第一次经过的整点是坐标除以他们的最大公约数:(x/gcd(x,y),y/gcd(x,y));

             这题也可以不用数学的知识,其他方法也可以的,以下是代码:

#include <vector>
#include <stack>
#include <string>
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <map>
#include <queue>
#define _for(i,a,b) for(int i=a;i<b;i++)
#define _unfor(i,a,b) for(int i=a;i>=b;i--)
#define RI(a) scanf("%d",&a)
#define mset(a,val,n) for(int i=0;i<n;i++)a[i]=val;
#define mset2(a,val,n,m) for(int i=0;i<n;i++)for(int j=0;j<m;j++)a[i][j]=val;
#define FI freopen("in.txt","r",stdin)
#define FO freopen("out.txt","w",stdout)
using namespace std;
typedef long long LL;

int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
}

int main() {
    int x1,y1,x2,y2;
	cin>>x1>>y1>>x2>>y2;
	int dy=y2-y1,dx=x2-x1,gcdxy=gcd(abs(dx),abs(dy));
	printf("%d %d\n",x2+dy/gcdxy,y2-dx/gcdxy);
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值