Как найти количество квадратов размещенных на прямоугольнике

0 / 0 / 0

Регистрация: 12.10.2014

Сообщений: 26

1

Найти количество квадратов, размещенных на прямоугольнике

26.10.2014, 15:27. Показов 17693. Ответов 15


Студворк — интернет-сервис помощи студентам

Помогите решить!!
Даны положительные числа A, B, C. На прямоугольнике размера A × B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике. Операции умножения и деления не использовать.



0



870 / 720 / 304

Регистрация: 15.04.2013

Сообщений: 2,047

Записей в блоге: 5

26.10.2014, 15:31

2

Squaker,
Умножение можно заменить сложением, деление — вычитанием



0



0 / 0 / 0

Регистрация: 12.10.2014

Сообщений: 26

26.10.2014, 15:41

 [ТС]

3

Это понятно…



0



140 / 133 / 88

Регистрация: 18.05.2013

Сообщений: 399

26.10.2014, 16:09

4

Довольно просто: в цикле, пока A>=C и B>=C, вычитайте A=A-C, B=B-C и увеличивайте значение счетчика на единицу. После окончания цикла, значение счетчика и будет числом квадратов.

Добавлено через 20 минут
Хотя нет, так неправильно…



0



0 / 0 / 0

Регистрация: 12.10.2014

Сообщений: 26

26.10.2014, 16:25

 [ТС]

5

Можешь помочь с кодом?



0



XRoy

870 / 720 / 304

Регистрация: 15.04.2013

Сообщений: 2,047

Записей в блоге: 5

26.10.2014, 16:48

6

Squaker,

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
            int a = 10, b = 7, c = 3;
 
            // Кол-во квадратов по вертикали
            int vertCount = 0;
            while (b >= c)
            {
                b -= c;
                vertCount++;
            }
            // Кол-во по горизонтали
            int horzCount = 0;
            while (a >= c)
            {
                a -= c;
                horzCount++;
            }
 
            int result = 0;
 
            for (int i = 0; i < vertCount; i++)
            {
                result += horzCount;
            }
 
            Console.WriteLine(result);



2



atoi

140 / 133 / 88

Регистрация: 18.05.2013

Сообщений: 399

26.10.2014, 16:48

7

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
using System;
 
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Введите A: ");
        int a = Convert.ToInt32(Console.ReadLine());
        Console.Write("Введите B: ");
        int b = Convert.ToInt32(Console.ReadLine());
        Console.Write("Введите C: ");
        int c = Convert.ToInt32(Console.ReadLine());
        int k = 0;
        int n = 0;
        while (a >= c)
        {
            a -= c;
            k++; //количество квадратов по стороне А
        }
        while (b >= c)
        {
            b -= c;
            n++; //количество квадратов по стороне В
        }
        int count = 0;
        for (int i = 0; i < k; i++)
            count += n;
        Console.WriteLine("N= " + count);
    }
}



2



0 / 0 / 0

Регистрация: 12.10.2014

Сообщений: 26

26.10.2014, 17:35

 [ТС]

8

всегда N=0, что-то не так



0



140 / 133 / 88

Регистрация: 18.05.2013

Сообщений: 399

26.10.2014, 17:38

9

Squaker, а какие значения A, B и С вы вводите?



0



0 / 0 / 0

Регистрация: 12.10.2014

Сообщений: 26

26.10.2014, 17:46

 [ТС]

10

любые значения вводишь и выводит 0… например 3,4,1 выводит 0



0



140 / 133 / 88

Регистрация: 18.05.2013

Сообщений: 399

26.10.2014, 17:53

11

У меня правильно все считает…Вариант XRoy тоже не работает (хотя он аналогичен)?

Миниатюры

Найти количество квадратов, размещенных на прямоугольнике
 



0



0 / 0 / 0

Регистрация: 12.10.2014

Сообщений: 26

26.10.2014, 17:56

 [ТС]

12

а ещё глупый вопрос у меня, в цикле for , переменная i за что она отвечает?



0



140 / 133 / 88

Регистрация: 18.05.2013

Сообщений: 399

26.10.2014, 18:22

13

Нужно немного абстрагироваться и представить прямоугольник как массив, в котором имеются строки и столбцы.
Сначала мы находим кол-во квадратов по стороне А (по горизонтали), затем по стороне B (по вертикали). Мы знаем, сколько квадратов у нас помещается в одном столбце (сторона В), число таких столбцов равно кол-ву квадратов по стороне A. Переменная i служит для того, чтобы пройтись по столбцам и найти общее количество квадратов.



1



0 / 0 / 0

Регистрация: 12.10.2014

Сообщений: 26

26.10.2014, 18:44

 [ТС]

14

большое спасибо!



0



0 / 0 / 0

Регистрация: 01.05.2020

Сообщений: 3

13.08.2020, 11:14

15

Напишите могу скинуть.



0



Эксперт .NET

11473 / 7814 / 1192

Регистрация: 21.01.2016

Сообщений: 29,310

13.08.2020, 11:22

16

pasphow, за прошедшие шесть лет я думаю, что ТС сам уже всё сделал.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

Регистрация: 17.06.2006

Сообщений: 92,604

13.08.2020, 11:22

Помогаю со студенческими работами здесь

Найти количество квадратов размещённых на прямоугольнике, а также площадь не занятой поверхности
Не хочу конечно мешать людям пользующимся данным форумом в профессиональном отношении, но у меня…

Найти количество квадратов, размещенных на прямоугольнике, а также площадь незанятой части прямоугольника
Даны целые положительные числа A, B,C. На прямоугольнике размера АхВ размещено максимально…

Найти количество квадратов, размещенных на прямоугольнике, а также площадь незанятой части прямоугольника
Даны целые положительные числа A, B, C. На прямоугольнике раз- мера A х B размещено максимально…

На прямоугольнике размещено максимально возможное количество квадратов. Найти количество квадратов и площадь незанятой части прямоугольника
1.Даны целые положительные числа A,B,C. На прямоугольнике размером A х B размещено максимально…

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:

16

Given a m x n rectangle, how many squares are there in it?

Examples : 

Input:  m = 2, n = 2
Output: 5
There are 4 squares of size 1x1 + 1 square of size 2x2.

Input: m = 4, n = 3
Output: 20
There are 12 squares of size 1x1 + 
          6 squares of size 2x2 + 
          2 squares of size 3x3.

squaresinREct

Let us first solve this problem for m = n, i.e., for a square:
For m = n = 1, output: 1
For m = n = 2, output: 4 + 1 [ 4 of size 1×1 + 1 of size 2×2 ]
For m = n = 3, output: 9 + 4 + 1 [ 9 of size 1×1 + 4 of size 2×2 + 1 of size 3×3 ]
For m = n = 4, output 16 + 9 + 4 + 1 [ 16 of size 1×1 + 9 of size 2×2 + 4 of size 3×3 + 1 of size 4×4 ]
In general, it seems to be n^2 + (n-1)^2 + … 1 = n(n+1)(2n+1)/6

Let us solve this problem when m may not be equal to n: 
Let us assume that m <= n

From above explanation, we know that number of squares in a m x m matrix is m(m+1)(2m+1)/6

What happens when we add a column, i.e., what is the number of squares in m x (m+1) matrix?

When we add a column, number of squares increased is m + (m-1) + … + 3 + 2 + 1 
[ m squares of size 1×1 + (m-1) squares of size 2×2 + … + 1 square of size m x m ] 
Which is equal to m(m+1)/2

So when we add (n-m) columns, total number of squares increased is (n-m)*m(m+1)/2.
So total number of squares is m(m+1)(2m+1)/6 + (n-m)*m(m+1)/2.
Using same logic we can prove when n <= m.

So, in general, 

Total number of squares = m x (m+1) x (2m+1)/6 + (n-m) x m x (m+1)/2 

when n is larger dimension

Using above logic for rectangle, we can also prove that number of squares in a square is n(n+1)(2n+1)/6

Below is the implementation of above formula. 

C++

#include<iostream>

using namespace std;

int countSquares(int m, int n)

{

if (n < m)

    swap(m, n);

return m * (m + 1) * (2 * m + 1) /

     6 + (n - m) * m *(m + 1) / 2;

}

int main()

{

int m = 4, n = 3;

cout << "Count of squares is "

     << countSquares(m, n);

}

C

#include <stdio.h>

int countSquares(int m, int n)

{

  int temp;

  if (n < m)

  {

      temp=n;

      n=m;

      m=temp;

  }

  return m * (m + 1) * (2 * m + 1) /

      6 + (n - m) * m *(m + 1)/ 2;

}

int main()

{

    int m = 4, n = 3;

    printf("Count of squares is %d",countSquares(m, n));

}

Java

class GFG

{

    static int countSquares(int m, int n)

    {

    if (n < m)

    {

        int temp = m;

        m = n;

        n = temp;

    }

    return m * (m + 1) * (2 * m + 1) /

        6 + (n - m) * m * (m + 1) / 2;

    }

    public static void main(String[] args)

    {

        int m = 4, n = 3;

        System.out.println("Count of squares is " +

                            countSquares(m, n));

    }

}

Python3

def countSquares(m, n):

    if(n < m):

        temp = m

        m = n

        n = temp

    return ((m * (m + 1) * (2 * m + 1) /

           6 + (n - m) * m * (m + 1) / 2))

if __name__=='__main__':

    m = 4

    n = 3

    print("Count of squares is "

         ,countSquares(m, n))

C#

using System;

class GFG {

    static int countSquares(int m, int n)

    {

    if (n < m)

    {

        int temp = m;

        m = n;

        n = temp;

    }

    return m * (m + 1) * (2 * m + 1) / 6 +

               (n - m) * m * (m + 1) / 2;

    }

    public static void Main()

    {

        int m = 4, n = 3;

        Console.WriteLine("Count of squares is "

                          + countSquares(m, n));

    }

}

PHP

<?php

function countSquares($m, $n)

{

    if ($n < $m)

        list($m, $n) = array($n, $m);

    return $m * ($m + 1) * (2 * $m + 1) /

       6 + ($n - $m) * $m * ($m + 1) / 2;

}

$m = 4; $n = 3;

echo("Count of squares is " . countSquares($m, $n));

?>

Javascript

<script>

function countSquares( m,  n)

{

if (n < m)

    [m, n] = [n, m];

return m * (m + 1) * (2 * m + 1) /

    6 + (n - m) * m *(m + 1) / 2;

}

    let m = 4;

    let n = 3;

document.write("Count of squares is "+countSquares(n, m));

</script>

Output : 

Count of Squares is 20

Time complexity: O(1)

Auxiliary Space: O(1)

Alternate Solution : 

  1. Let us take m = 2, n = 3;
  2. The number of squares of side 1 will be 6 as there will be two cases one as squares of 1-unit sides along with the horizontal(2) and the second case as squares of 1-unit sides along the vertical(3). that give us 2*3 = 6 squares.
  3. When the side is 2 units, one case will be as squares of the side of 2 units along only one place horizontally and the second case as two places vertically. So, the number of squares=2
  4. So we can deduce that, Number of squares of size 1*1 will be m*n. The number of squares of size 2*2 will be (n-1)(m-1). So like this, the number of squares of size n will be 1*(m-n+1).

The final formula for the total number of squares will be n*(n+1)(3m-n+1)/6 .

C++

#include <iostream>

using namespace std;

int countSquares(int m, int n)

{

    if (n < m) {

        int temp = m;

        m = n;

        n = temp;

    }

    return n * (n + 1) * (3 * m - n + 1) / 6;

}

int main()

{

    int m = 4, n = 3;

    cout << "Count of squares is " << countSquares(m, n);

}

C

#include <stdio.h>

int countSquares(int m, int n)

{

    if (n < m)

    {

        int temp = m;

        m = n;

        n = temp;

    }

    return n * (n + 1) * (3 * m - n + 1) / 6;

}

int main()

{

    int m = 4, n = 3;

    printf("Count of squares is %d",countSquares(m, n));

}

Java

import java.util.*;

class GFG

{

    static int countSquares(int m, int n)

    {

        if (n < m)

        {

            int temp = m;

            m = n;

            n = temp;

        }

        return n * (n + 1) * (3 * m - n + 1) / 6;

    }

    public static void main(String[] args)

    {

        int m = 4;

        int n = 3;

        System.out.print("Count of squares is " +

                             countSquares(m, n));

    }

}

Python3

def countSquares(m, n):

    if(n < m):

        temp = m

        m = n

        n = temp

    return n * (n + 1) * (3 * m - n + 1) // 6

if __name__=='__main__':

    m = 4

    n = 3

    print("Count of squares is",

           countSquares(m, n))

C#

using System;

class GFG

{

    static int countSquares(int m, int n)

    {

        if (n < m)

        {

            int temp = m;

            m = n;

            n = temp;

        }

        return n * (n + 1) * (3 * m - n + 1) / 6;

    }

    public static void Main(String[] args)

    {

        int m = 4;

        int n = 3;

        Console.Write("Count of squares is " +

                          countSquares(m, n));

    }

}

Javascript

<script>

function countSquares(m , n)

{

    if (n < m)

    {

        var temp = m;

        m = n;

        n = temp;

    }

    return n * (n + 1) * (3 * m - n + 1) / 6;

}

var m = 4;

var n = 3;

document.write("Count of squares is " +

               countSquares(m, n));

</script>

Output : 

Count of Squares is 20

Time complexity: O(1)

Auxiliary Space: O(1)

Thanks to Pranav for providing this alternate solution.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.

Approach#3: Using loop

This approach counts the number of squares in a given rectangle of size m x n by iterating over all possible square sizes from 1 to the minimum of m and n, and adding up the number of squares of each size that can fit in the rectangle. 

Algorithm

1. Initialize a counter variable to 0.
2. Iterate over all possible square sizes, i.e. from 1 to min(m, n).
3. For each square size, calculate the number of squares that can be formed.
4. Add this count to the counter variable.
5. Return the final count.

C++

#include <iostream>

using namespace std;

int count_squares(int m, int n) {

    int count = 0;

    for (int i = 1; i <= min(m, n); i++) {

        count += (m - i + 1) * (n - i + 1);

    }

    return count;

}

int main() {

    int m = 4;

    int n = 3;

    cout << count_squares(m, n) << endl;

    return 0;

}

Python3

def count_squares(m, n):

    count = 0

    for i in range(1, min(m, n) + 1):

        count += (m - i + 1) * (n - i + 1)

    return count

m=4

n=3

print(count_squares(m, n))

Java

public class Main {

    public static void main(String[] args) {

        int m = 4;

        int n = 3;

        System.out.println(countSquares(m, n));

    }

    public static int countSquares(int m, int n) {

        int count = 0;

        for (int i = 1; i <= Math.min(m, n); i++) {

            count += (m - i + 1) * (n - i + 1);

        }

        return count;

    }

}

Javascript

function count_squares(m, n) {

    let count = 0;

    for (let i = 1; i <= Math.min(m, n); i++) {

        count += (m - i + 1) * (n - i + 1);

    }

    return count;

}

let m = 4;

let n = 3;

console.log(count_squares(m, n));

Time Complexity: O(m * n * min(m, n))
Space Complexity: O(1)

Last Updated :
28 Apr, 2023

Like Article

Save Article

Формулировка задачи:

Даны целые положительные числа A, B, C. На прямоугольнике раз- мера A х B размещено максимально возможное количество квадратов со стороной C (без наложений). Найти количество квадратов, размещенных на прямоугольнике, а также площадь незанятой части прямоугольника

Код к задаче: «Найти количество квадратов, размещенных на прямоугольнике, а также площадь незанятой части прямоугольника»

textual

Листинг программы

var
   a,b,c,Sk,Sp:integer;
   Resulr:real;
begin
     Writeln('Enter please A,B,C=');
     readln(a,b,c);
    Sk:=c*c;
    Sp:=a*b;
    Resulr:=Sp div Sk;
    writeln('Количество квадратов размещенных в прямоугольнике=',Resulr);
end.

Дан прямоугольник из N×M квадратов. Назовём квадраты на границе прямоугольника крайними. Расстоянием от какого‑либо квадрата до края назовём количество перемещений, которое нужно сделать из данного квадрата в соседний по стороне квадрат, чтобы добраться от данного квадрата до крайнего квадрата. Квадраты с максимальным расстоянием до края, будем называть центральными. При этом квадрат может быть одновременно и крайним, и центральным.

На рисунке изображён прямоугольник для N=7 и M=8, в каждом квадрате которого записано расстояние от этого квадрата до края. У этого прямоугольника два центральных квадрата.

По данным N и M определите количество центральных квадратов в прямоугольнике.

Формат входных данных

Программа получает на вход два целых положительных числа, записанных в разных строках, не превосходящих 109 — размеры прямоугольника.

Формат выходных данных

Программа должна вывести одно число — количество центральных клеток в данном прямоугольнике.

(Visited 282 times, 1 visits today)

Dwasedma ответил на вопрос 25.10.2022

Имеется миллиметровка со сторонами n на m, нужно посчитать количество всех квадратов границы которых проходят по границам клеток. (Точнее, вывести формулу).

Формулу подсчёта квадратов на квадратной шахматной доске знаю:
$$sumlimits_{k=1}^nk^2=frac{n∙(n+1)∙(2∙n+1)}6$$

Из [math.hashcode.ru/questions/40893/

Для начала я писал такие примеры,
для прямоугольника:
2х1 $$1 times 1+1=2 $$ $$квадрата $$
3х2 $$(1 times 1+1)+(2 times 2+2)=8 $$$$квадратов $$
4х3 $$(1 times 1+1)+(2 times 2+2)+(3 times 3+3)=20$$$$квадратов $$
3х1 $$1 times 1+1+1=3 $$$$квадрата $$
4х2 $$(1 times 1+1+1)+(2 times 2+2+2)=11$$$$квадратов $$
5×3 $$(1 times 1+1+1)+(2 times 2+2+2)+(3 times 3+3+3)=26$$$$квадратов $$

Понравилась статья? Поделить с друзьями:
  • Как составить схему к задаче на производительность
  • Как найти спонсора культура
  • Смотреть видео как найти друга
  • Как составить анкету для диссертации
  • Как найти площадь заштрихованного квадрата