Минимальное количество квадратов

#c

Вопрос:

Существует проблема, которая гласит:

У Джона есть лист бумаги размером NxM, он хочет разрезать его на квадраты 1×1, с правилами:он может разрезать лист бумаги только один раз в определенное время, каждый разрез должен проходить по всей бумаге

Вот код для этого:

 int n , m; cin gt;gt; n gt;gt; m; cout lt;lt; (n - 1)   1LL * n * (m - 1);  

Может кто-нибудь объяснить, почему вы решаете эту проблему именно так?

Комментарии:

1. Чего требует проблема в результате?

2. @enzo Я считаю, что они просто просят объяснить код, а не помочь его исправить

3. @Austin Я знаю, но обычно для подобных задач требуется результат, например «Вычислите количество разрезов, которые Джон должен сделать в бумаге» или «Вычислите количество квадратов 1×1, которые Джон может сделать, разрезав бумагу». Может быть, это меня смутило.

4. количество сокращений-это необходимый ответ

Ответ №1:

Это мое понимание вопроса, основанное на ответе:

  • Вы разрезаете бумагу на N кусочков одинаковой длины. Каждый из них имеет длину 1 и ширину M. Для этого требуется (N-1) сокращений.
  • Для каждого из этих N листов вы разрезаете их на M равных частей, которые имеют 1 ширину и 1 длину. Для этого требуется (M-1) для каждого листа, таким образом, всего N * (M-1).

Следовательно, результат (N-1) N * (M-1)

Комментарии:

1. О боже, вот и все, большое тебе спасибо, брат!!!

2. @kiddoP Вы можете принять ответ, если он отвечает на ваш вопрос. (Вы должны установить зеленую галочку слева от ответа.)

Ответ №2:

Я не понял вопроса, пока не увидел ответ @mkemaltas.

Теперь вы можете упростить эту формулу (N-1) N * (M-1) N * M - 1 .

Комментарий 1LL *... к вопросу: если M * N больше этого максимального int значения — вы получите переполнение целого числа. Добавив это long long int в выражение, вы преобразуете все в long long , избегая возможного переполнения.

Комментарии:

1. да, я знаю об ошибке переполнения, дело не в этом, проблема в том, что, когда я использовал формулу N*M-1, что-то пошло не так, и я не набрал все очки в упражнении, поэтому я был сбит с толку, почему один дает больше очков, чем другой, но @mkemaltas оказался действительно полезным. Тем не менее, спасибо и вам за то, что ответили!!

2. @kiddoP Ну что, ты сделал 1LL*N*M-1 ?