用c++编写代码。要求题目描述: 在一个平面直角坐标系中给定两个点的坐标 A(x1, y1),B(x2, y2),A、B 两个点的横纵坐标都 是整数,连接 A、B 两点,请问线段 AB 上,横纵坐标都是整数的点有多少个。 输入格式: 4 个整数,x1, y1, x2, y2,用空格隔开,表示 A、B 两点的坐标。 输出格式: 一个整数,表示线段 AB 上横纵坐标都是整数的点的数量。 样例输入: 0 0 3 3 样例输出: 4 数据说明: x1, x2, y1, y2 的绝对值都不大于 1000000
时间: 2023-06-10 14:08:53 浏览: 200
以下是C语言的代码实现:
```c
#include <stdio.h>
#include <stdlib.h>
int gcd(int a, int b) {
if (b == 0) {
return a;
}
return gcd(b, a % b);
}
int main() {
int x1, y1, x2, y2;
scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
int dx = abs(x1 - x2); // x轴距离
int dy = abs(y1 - y2); // y轴距离
if (dx == 0) { // 斜率不存在
printf("%d", dy + 1); // 点的数量为两个端点之间的距离+1
} else if (dy == 0) { // 斜率为0
printf("%d", dx + 1); // 点的数量为两个端点之间的距离+1
} else { // 一般情况
int d = gcd(dx, dy); // gcd函数计算最大公约数
printf("%d", d + 1); // 点的数量为两个端点之间的距离除以最大公约数+1
}
return 0;
}
```
首先输入两个点的坐标,然后计算它们之间的距离(横轴距离和纵轴距离),然后分三种情况讨论:
- 斜率不存在,即两点在同一竖直线上,此时线段AB上横纵坐标都是整数的点的数量为两个端点之间的距离+1;
- 斜率为0,即两点在同一水平线上,此时线段AB上横纵坐标都是整数的点的数量为两个端点之间的距离+1;
- 一般情况,此时线段AB上横纵坐标都是整数的点的数量为两个端点之间的距离除以它们之间的最大公约数+1。
最后输出点的数量即可。
阅读全文