给定平面上的两个格点p1=(x1,y1),p2=(x2,y2),线段p1p2上,出两点外一共有几个格点?
限制条件:
-10^9<=x1,x2,y1,y2<=10^9
这个题暴力肯定是不行的,必须要想到答案是gcd(|x1-x2|,|y1-y2|)-1,然后用辗转相除法得解
using namespace std;
int gcd(int a,int b)
{
if(b==0)
return a;
return gcd(b,a%b);
}
int main()
{
int x1,x2,y1,y2;
cin>>x1>>y1>>x2>>y2;
int c=(x1-x2)/gcd(abs(x1-x2),abs(y1-y2));
int k=(y1-y2)/gcd(abs(x1-x2),abs(y1-y2));
int ans=gcd(abs(x1-x2),abs(y1-y2))-1;
while(ans)
{
x1-=c;
y1-=k;
cout<<'('<<x1<<','<<y1<<')'<<endl;
ans--;
}
return 0;