导航

线段上格点的个数

Posted on 2016-01-25 18:49  POOH1DROSE  阅读(654)  评论(0编辑  收藏  举报

2016.1.25

试题描述

给定平面上的两个格点P1=(x1,y1)和P2=(x2,y2),线段P1P2上,除了P1和P2以外一共有多少个格点?

输入
一行包括四个数,分别为x1,x2,y1和y2,两两之间用一个空格分隔。
输出
输出一个数,表示题目描述的格点的个数。
输入示例
1 5 11 3
输出示例
3
其他说明
数据范围:-10^9<=x1,x2,y1,y2<=10^9

 

算出横坐标差纵坐标差,辗转相除一发,注意判负,还有特殊情况(两点重合)

 

AC代码:

#include<iostream>
using namespace std;
long long gcd(long long a,long long b)
{
    if(!b) return a;
    return gcd(b,a%b);
}
int main()
{
    int x1,x2,y1,y2;
    scanf("%d%d%d%d",&x1,&x2,&y1,&y2);
    long long x=x2-x1,y=y2-y1;
    if(x<0) x=-x;if(y<0) y=-y;
    if(!x&&!y) printf("0");
    else printf("%lld",gcd(x,y)-1);

}
View Code