利用辗转相除法求最大公约数
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
线段上格点的个数
题目描述
给定平面上的两个格点P1=(x1,y1)和P2=(x2,y2),线段P1P2上,除P1和P2以外一共有几个格点并打印出格点坐标?(格点是指横纵坐标均为整数的点。)(-1000000000<=x1,y1,x2,y2<=1000000000)
输入
P1=(1,11),P2=(5,3)
输出
(2,9)、(3,7)、(4,5)
#include<iostream>
#include<cmath>
using namespace std;
int gcd(int a,int b)
{
if(b==0) return a;
return gcd(b,a%b);
}
int main()
{
int x1,y1,x2,y2;
while(scanf("%d%d%d%d",&x1,&y1,&x2,&y2)==4){
int wide,len,temp;
temp=gcd(abs(x1-x2),abs(y1-y2));
wide=(x1-x2)/temp;
len=(y1-y2)/temp;
int res=temp-1;
while(res){
x1-=wide;
y1-=len;
cout<<"("<<x1<<","<<y1<<")"<<endl;
res--;
}
}
return 0;
}