#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
?