3625 - 线段上点的个数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 64 MB

给定平面上两个点p1=(x1,y1),p2=(x2,y2),线段p1p2上,除p1和p2以外一共有几个格点(即坐标为整数的点)?

限制条件,-10^9<=x1,x2,y1,y2<=10^9

题目输入

每一行输入x1,y1,x2,y2,以空格隔开;

题目输出

对应的每一行输出格点数

输入/输出样例

输入格式

1 11 5 3

输出格式

3

C语言解答

#include <stdio.h>
int num(int a,int b)
{
	if(b==0)
	return a;
	else
	return num(b,a%b);
}
int main()
{
	int x1,x2,y1,y2;
	while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)!=EOF)
	{
		if(x1==x2&&y1==y2)
		printf("0\n");
		else
		printf("%d\n",num(x2-x1,y2-y1)-1);
	}
	return 0;
}

C++解答

#include <bits/stdc++.h>
using namespace std;

int gcd(int as,int ad)
{
    if (ad==0) return as;
    else gcd(ad,as%ad);
}

int main()
{
	int x1,y1,x2,y2;
	while(~scanf("%d%d%d%d",&x1,&y1,&x2,&y2)){
		int x=fabs(x2-x1);
		int y=fabs(y2-y1);
		int ans=gcd(x,y);
		if (ans>0) ans--;
		printf("%d\n",ans);
		
	}
	return 0;
}