给定平面上的两个格点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;