小X与机器人

小X在做一个机器人的项目,他正思考这样一个问题:如果一个小机器人从(x1, y1)这个位置出发,沿直线移动到(x2, y2)这个位置,它一共经过了多少个交叉点?
注意起点和终点也算作经过,因此至少经过了2个交叉点。

输入
输入数据仅有一行包含4个用空格隔开的正整数,分别表示x1, y1, x2, y2

输出
输出一行包含一个小于20的正整数,表示从(x1, y1)沿直线移动到(x2, y2)经过的交叉点的个数。

int gcd(int x, int y) {
    if (y == 0) return x;
    return gcd(y, x%y);
}

int main(int argc, const char * argv[]) {
    /*
     x1=x2
     y1=y2
     
     一个 格 w=h=1
     正方形 abs(x1-x2)
     
     奇偶 2
     奇奇  2
     偶偶  3
     */
    int x1,x2,y1,y2;
    cin >> x1>>y1>>x2>>y2;
    
    int w = abs(x1 - x2);
    int h = abs(y1 - y2);
    
    cout <<gcd(w, h)+1<<endl;
    return 0;
}
posted @ 2019-12-24 15:54  0x8023  阅读(252)  评论(0编辑  收藏  举报