Я пытаюсь решить следующую проблему:
Прямоугольный лист бумаги M * N должен быть разрезан на квадраты так, что:
- Бумага разрезается вдоль линии, параллельной одной из сторон бумаги.
- Бумага разрезается так, что результирующие размеры всегда целые.
Процесс останавливается, когда бумага не может быть разрезана.
Каково минимальное количество разрезанных кусков бумаги, чтобы все были квадратами?
Пределы: 1 <= N <= 100 и 1 <= M <= 100.
Пример: пусть N = 1 и M = 2, тогда ответ равен 2, так как минимальное количество квадратов, которые можно разрезать, равно 2 (бумага разрезается горизонтально вдоль меньшей стороны посередине).
Мой код:
cin >> n >> m;
int N = min(n,m);
int M = max(n,m);
int ans = 0;
while (N != M) {
ans++;
int x = M - N;
int y = N;
M = max(x, y);
N = min(x, y);
}
if (N == M && M != 0)
ans++;
Но я не понимаю, что неправильно с этим подходом, поскольку это дает мне неправильный ответ.