首页 > 试题广场 >

比例问题

[编程题]比例问题
  • 热度指数:3103 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 128M,其他语言256M
  • 算法知识视频讲解
小强想要从中选出一个整数,从中选出一个整数 .使得满足  = 的同时且的乘积最大。如果不存在这样的,请输出“ 0 0”.

输入描述:
输入一行包含四个整数,,.



输出描述:
输出两个整数表示满足条件的.若不存在,则输出"0 0".
示例1

输入

1 1 2 1

输出

0 0
示例2

输入

1000 500 4 2

输出

1000 500
示例3

输入

1000 500 3 1

输出

999 333
def niuke2():
    A, B, a, b = [int(i) for i in input().split()]
    gcd_ab = gcd(a, b)
    x_min = a / gcd_ab
    y_min = b / gcd_ab

    mul = min(int(A / x_min), int(B / y_min))
    return str(int(x_min * mul))+' '+str(int(y_min * mul))

# 求最大公约数
def gcd(mm: int, nn: int) -> int:
    m = max(mm, nn)
    n = min(mm, nn)
    rem = 1
    while rem:
        rem = m % n
        m = n
        n = rem
    return m

print(niuke2())


发表于 2022-03-07 11:34:20 回复(0)
def simplify(a, b):  # 欧几里得方法求最大公约数
    m, n = a, b
    while n > 0:
        m, n = n, m % n
    return a // m, b // m

A, B, a, b = map(int, input().split())
a, b = simplify(a, b)
unity = min(A // a, B // b)  # 求出最大的满足条件的unity,是的a,b乘以unity都在范围内
print(a*unity, b*unity) 

发表于 2022-03-02 23:02:22 回复(0)