Не могу понять задачу на C++
Здравствуйте, готовлюсь к олимпиаде по информатике. Во время решения данной задачи столкнулся с тем, что не понимаю откуда берётся такой результат. Написал программу которая находит по одному значению второе, а потом их S. Вот код:
#include <iostream>
using namespace std;
int main()
{
setlocale(0, "");
int width = 0, height = 0, S = 0, K = 0;
double part;
cout << "Введите число K = " << endl;
cin >> K;
while (!(K >= 2) || !(K <= 100))
{
cout << "Число должно быть не меньше 2 и не больше 100!" << endl;
cout << "Введите число K = " << endl;
cin >> K;
}
if (K <= 50) {
width = K;
part = width / static_cast<double>(5);
height = part * 3;
// cout << part;
}
else {
height = K;
part = height / static_cast<double>(3);
width = part * 5;
}
S = width * height;
cout << "S = " << S << endl;
}
Ответы (2 шт):
Ну так, что сложного?
Допустим мы ввели натуральное число num = 75 => length,тогда получаем примерно следующее: (num * num * width)/length;. И наоборот — то же самое, только меняем местами width <-> length.
Во-первых, вы перепутали отношения. Если K <= 50, то это ширина, а значит длина -- K / (3 / 5) или же K * (5 / 3). Во-вторых, поскольку вы работаете с целыми числами, необходимо все операции деления выполнять в самом конце, чтобы не потерять дробную часть.
Алгоритм примерно такой:
- частично найти вторую сторону, умножив известную на числитель отношения (Если на вход дали 8:
8 * 5, результат 40); - найти произведение стороны на найденное число (
8 * 40, результат 320); - найти результат целочисленного деления полученного на предыдущем этапе числа на знаменатель отношения (
320 / 3, результат 106); - найти остаток от деления полученного на предыдущем этапе числа на знаменатель отношения (
320 % 3, результат 2)
Дальше только вывод. Если результат последнего шага -- 0, то вывести только результат предпоследнего шага. Если нет, то вывести результат предпоследнего шага, последнего и знаменатель отношения
UPD: Дополнение от @ГерманБорисов: В задаче сказано про "минимальный возможный знаменатель", но так как и 3 и 5 являются простыми числами, шаг сокращения дроби можно пропустить.
