3625 - 线段上点的个数
时间限制 : 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; }