• Нужно написать программу, определяющую количество прямоугольников, которые можно вписать в прямоугольник с заданными сторонами M*N
    Программа получает на вход два числа N и M – размеры исходного листа. Все числа –
    целые положительные, не превосходящие 75000.
    Программа должна вывести одно число – количество прямоугольников, которые
    можно вырезать из данного листа бумаги (весь лист целиком также считается одним из
    возможных прямоугольников).
    Примеры Вводят 2 и 2 выводится 9
    вводят 3 и 1 выводится 6

Ответы 2

  • программа не работает с числами больше 200
    • Автор:

      mac97
    • 4 года назад
    • 0
  • Посчитаем сколько всего узлов на этом листке:у нас он N клеточек в высоту, значит всего в каждом столбике N+1 узел;у нас он М клеточек в ширину, значит всего в каждой строчке М+1 узел.Значит всего узлов (N+1)*(М+1).Чтобы определьть прямоугольник, надо определить два узла в которых будут противоположные углы:первый узел мы можем выбрать (N+1)*(М+1) способами;второй узел мы можем выбрать N*М способами (мы не можем выбрать тот столбик и тот ряд, в котором у нас стоит первый узел).Тоэсть всего способов выбрать (N+1)*(М+1)*N*М, но это не так.Рассмотрим весь лист как выбраный прямоугольник.Пусть мы его выбрали так:(0; 0),  (N+1; М+1).Этот же прямоугольник мы считали, когда плучали с такими координатами:1) (N+1; М+1),  (0; 0).2) (N+1; 0),  (0; М+1).3) (0; М+1),  (N+1; 0).И так с каждым прямоугольником, тоэсть каждый прямоугольник мы считаем 4 раза, тоэсть конечная формула такова:(N+1)*(М+1)*N*М / 4.Осталось составить прогрмму, которая будет это вичислять.С++:#include <iostream>using namespace std;int main(){int N, M, k;cin >> N >> M;k = (N+1)*(M+1)*N*M / 4;cout << k << endl;return 0;}Pascal:program Znanija;var N, M, k:integer;beginread(N);read(M);k:=((N+1)*(M+1)*N*M) div 4;writeln();writeln(k);end.
  • Добавить свой ответ

Войти через Google

или

Забыли пароль?

У меня нет аккаунта, я хочу Зарегистрироваться

How much to ban the user?
1 hour 1 day 100 years