描述
假设一个机器人在笛卡尔坐标系上。它从(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);
}

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

被折叠的 条评论
为什么被折叠?



