Учитывая два целых числа, как я могу минимизировать их так, чтобы их произведение было меньше, чем какое-либо другое значение, при этом сохраняя их относительное соотношение?
Это формальная проблема. Практическая проблема заключается в следующем: у меня есть разрешение пикселей ширины / высоты, содержащее случайные значения (от 1 до 8192 для любого измерения). Я хочу настроить пары значений так, чтобы их произведение не превышало некоторого общего количества пикселей (например, 1000000), и мне нужно убедиться, что соотношение сторон настроенного разрешения остается прежним (например, 1.7777).
Наивный подход состоит в том, чтобы просто запустить al oop, где я каждый раз вычитаю 1 из ширины, регулируя высоту в соответствии с соотношением сторон, пока их произведение не окажется ниже порогового значения. Пример:
int wid = 1920;
int hei = 1080;
float aspect = wid / (float)hei;
int maxPixels = 1000000;
while (wid * hei > maxPixels)
{
wid -= 1;
hei = wid / aspect;
}
Конечно, должен быть более аналитический подход к этой проблеме, хотя?