Найти количество целочисленных координат принадлежащих отрезку
Надо в задаче определить сколько всего целочисленных координат принадлнжат данному отрезку.
На вход идут координаты концов отрезков x1,y1,x2,y2. На выход надо вывести количество точек отрезка, имеющих целочисленные координаты.
Ввод: 1 0 5 0
Вывод: 5
x1, y1, x2, y2 = map(int, input().split())
if x1 < x2:
a = x2 - x1
else:
a = x1 - x2
if y1 < y2:
b = y2 - y1
else:
b = y1 - y2
from math import gcd
print(gsd(a, b)+1)
Ответы (2 шт):
Автор решения: passant
→ Ссылка
Что-то невидно никаких потуг с вашей стороны к решению задач вами самостоятельно. Понятно почему "0 тестов из 36". Но непонятно, причем тут gcd. Вообще ничего. За такое на этом форуме банят.
Но, учитывая, что вы как-бы новичек, а меня тут призывают быть терпимее к двоечникам и лентяям, даю вам "решение". А уж как его уложить в вашу тестовую систему - думайте сами.
for x in range(x1,x2+1):
for y in range (y1,y2+1):
if abs((y1 - y2) * x + (x2 - x1) * y + (x1 * y2 - x2 * y1)) /(((x2 - x1)**2 + (y2 - y1)**2)**0.5) ==0 :
print(x,y)
Автор решения: Fox Fox
→ Ссылка
'''
Написать скрипт:
определить количество точек отрезка,
заданного координатами x1, y1, x2, y2,
имеющих целочисленные координаты.
'''
print("-" * 70
+ "\nКоличество точек отрезка, заданного координатами x1, y1, x2, y2,\n"
+ "имеющих целочисленные координаты:\n" + "-" * 70)
import os
# Функция для нахождения наибольшего общего делителя:
def gcd(a, b):
while b:
a, b = b, a % b
return a
def count_integer_points(x1, y1, x2, y2):
# Если отрезок горизонтальный или вертикальный:
if x1 == x2: return abs(y2 - y1) + 1
elif y1 == y2: return abs(x2 - x1) + 1
# Иначе используем формулу для нахождения количества целых точек на отрезке:
else: return gcd(abs(x2 - x1), abs(y2 - y1)) + 1
# Пример использования:
x1, y1, x2, y2 = 1, 0, 5, 0
result = count_integer_points(x1, y1, x2, y2)
print("Количество точек:", result) # Вывод: 5
print("\nНажмите любую клавишу для продолжения...")
os.system("pause > nul" if os.name == "nt" else "read > /dev/null")