Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Demon55
1 / 1 / 0
Регистрация: 29.11.2013
Сообщений: 46
#1

Посчитать количество прямоугольников, заданных черным цветом - C++

29.11.2013, 08:58. Просмотров 1371. Ответов 11
Метки нет (Все метки)

С++ изучаю несколько месяцев и есть проблемы с синтаксисом и пониманием=)
Не совсем понятно что от меня требуют?
И не знаю как реализовать решение данной задачи.
Заранее благодарен, за помощь.

Собственно, задача:
Прямоугольное поле m на n разбито на mn квадратных клеток. Некоторые клетки покрашены в черный цвет. Известно, что все черные клетки могут быть разбиты на несколько непересекающихся и не имеющих общих вершин черных прямоугольников. Считая, что цвета клеток даны в виде массива типа arr [m] [n], где каждый элемент равен единице только тогда когда эта клетка черная, если она белая, то элемент массива равен 0, подсчитать число черных прямоугольников.
Прим. Число прямоугольников равно числу их левых верхних углов. Является ли клетка верхним углом, можно узнать, посмотрев на ее цвет, а так же цвет верхнего и левого соседей.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.11.2013, 08:58
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Посчитать количество прямоугольников, заданных черным цветом (C++):

Вычислить сумму элементов матрицы выделенную черным цветом - C++
Привет,помоги мне пожалуйста добрый человечище, заранее спасиб. Вот код, функция Summa нужно доработать, Вот то что нужно вычислить ...

Посчитать количество заданных букв в файле - C++
Подскажите, почему не считает количество заданной буквы? #include <iostream> #include <conio.h> #include <cstring> #include...

В текстовом файле посчитать количество заданных букв - C++
Задание: "В текстовом файле посчитать количество заданных букв" Срочно надо, вообще ничего не понимаю.

Посчитать количество смен знаков заданных чисел массива - C++
1. Задан массив из 10 целых чисел. Посчитать количество смен знаков заданных чисел. Перебор элементов массива должен осуществляться...

Объединение прямоугольников (количество объединенных прямоугольников минимально) - C++
Добрый день. Прошу помощи в выполнении задачи. Дан список прямоугольников, которые задаются координатами верхней левой вершины и...

Посчитать значения функции в точках, заданных массивом - C++
Необходимо написать программу, которая считает функцию x-x^2 в тех точках которые заданы в массиве. Массив вводится с клавиатуры....

11
ПерС
377 / 302 / 91
Регистрация: 05.11.2013
Сообщений: 825
Записей в блоге: 5
Завершенные тесты: 1
29.11.2013, 09:10 #2
От тебя требуют найти все кораблики в "Морском бое"
0
SatanaXIII
Супер-модератор
Эксперт С++
5650 / 2695 / 252
Регистрация: 01.11.2011
Сообщений: 6,588
Завершенные тесты: 1
29.11.2013, 09:15 #3
А мне подумалось, что то типа вот такого:

Посчитать количество прямоугольников, заданных черным цветом
0
Demon55
1 / 1 / 0
Регистрация: 29.11.2013
Сообщений: 46
29.11.2013, 09:21  [ТС] #4
Цитата Сообщение от SatanaXIII Посмотреть сообщение
А мне подумалось, что то типа вот такого:
Вложение 334924
Прямоугольники вроде как не должны пересекаться.
0
SatanaXIII
Супер-модератор
Эксперт С++
5650 / 2695 / 252
Регистрация: 01.11.2011
Сообщений: 6,588
Завершенные тесты: 1
29.11.2013, 09:31 #5
Цитата Сообщение от Demon55 Посмотреть сообщение
Прямоугольники вроде как не должны пересекаться.
Да, действительно.
Но от диагонального размещения условия не страхуют.

P.S. Еще я не понял про примечание.
0
Demon55
1 / 1 / 0
Регистрация: 29.11.2013
Сообщений: 46
29.11.2013, 09:42  [ТС] #6
Опишу как понял эту задачу я:
Размер поля вводим с консоли (как раз те m и n), все поле заполнено 0, а в разных участках поля располагаются прямоугольники из 1, нужно посчитать кол-во прямоугольников.
Не пойму какого размера прямоугольники и сколько их должно быть на поле.
0
SatanaXIII
Супер-модератор
Эксперт С++
5650 / 2695 / 252
Регистрация: 01.11.2011
Сообщений: 6,588
Завершенные тесты: 1
29.11.2013, 10:09 #7
Цитата Сообщение от Demon55 Посмотреть сообщение
Размер поля вводим с консоли
Вряд ли. Слишком геморное тестирование будет. Вот же:
Цитата Сообщение от Demon55 Посмотреть сообщение
Считая, что цвета клеток даны в виде массива
Для простоты можно прям в программе забивать. Обычно подобные задания не на умения ввода с консоли. )
C++
1
2
3
4
5
6
7
const int n = 6, m = 5;
int arr[n][m] = { { 1, 1, 1, 0, 0 },
                  { 1, 0, 1, 0, 0 },
                  { 1, 0, 1, 0, 0 },
                  { 1, 1, 1, 0, 0 },
                  { 0, 0, 0, 1, 1 },
                  { 0, 0, 0, 1, 1 } };
Добавлено через 2 минуты
Вот здесь поглядите. Я там выводил алгоритм.
Найти площадь крупнейшего сплошного прямоугольника суши
1
Stingo
1 / 1 / 0
Регистрация: 29.11.2013
Сообщений: 10
29.11.2013, 10:34 #8
Если я правильно понял, по условию задачи предпологается, что прямоугольники всегда расставлены правильно, то есть варианты типо такого:
C++
1
2
3
4
5
6
{ 1, 1, 1, 1, 0 },
{ 1, 0, 1, 1, 0 },
{ 1, 0, 1, 0, 0 },
{ 1, 1, 1, 0, 0 },
{ 0, 0, 0, 1, 1 },
{ 0, 0, 0, 1, 1 }
исключены.
Соответственно, согласно примечанию ищем углы проверяем левый и верхний элемент массива и при положительном исходе инкреминируем счетчик:
C++
1
2
3
4
5
6
7
8
9
10
11
12
//задаем массив и счетчик
int arr [n][m] = {...};
int sum = 0;
//сам поиск
for (int i = 0; i < n; i++) 
{
    for (int j = 0; j < m; j++) 
    {
            if (arr[i][j]==1 && arr[i-1][j]==0 && arr[i][j-1]==0) sum++;
        }
}
cout << "число прямоугольников: " << sum;
0
Demon55
1 / 1 / 0
Регистрация: 29.11.2013
Сообщений: 46
29.11.2013, 14:39  [ТС] #9
SatanaXIII, ваш алгоритм показался слишком сложным.

Stingo
Я попробовал ваш вариант, но работает не совсем корректно.
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
#include "stdafx.h"
#include <stdio.h>
#include "conio.h"
#include <locale.h>
#include <cstdlib>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{setlocale(LC_ALL, "Russian");
const int n = 7, m = 8;
int arr[n][m] = { { 1, 1, 1, 0, 0, 0, 0, 0 },
                  { 1, 1, 1, 0, 0, 0, 0, 0 },
                  { 1, 1, 1, 0, 0, 0, 0, 0 },
                  { 0, 0, 0, 0, 0, 0, 0, 0 },
                  { 0, 0, 0, 1, 1, 1, 0, 0 },
                  { 0, 0, 0, 1, 1, 1, 0, 0 },
                  { 0, 0, 0, 1, 1, 1, 0, 0 } };
    
int sum = 0;
for (int i = 0; i < n; i++) 
{
    for (int j = 0; j < m; j++) 
    {
            if (arr[i][j]==1 && arr[i-1][j]==0 && arr[i][j-1]==0) sum++;
        }
}
printf("Число прямоугольников %d\n ", sum);
system("pause");
    return 0;
}
0
Stingo
1 / 1 / 0
Регистрация: 29.11.2013
Сообщений: 10
29.11.2013, 15:14 #10
А, ну это из-за нулевых значений индексов, если i и/или j равны нолю, то i-1 и/или j-1 не работают.
Ну соответственно проверку нулевых значений индексов добавить надо, хотя бы так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
for (int i = 0; i < n; i++) 
{
    for (int j = 0; j < m; j++) 
    {
            if (arr[i][j]==1)
            {
                if (i>0 && j>0 && arr[i-1][j]==0 && arr[i][j-1]==0) sum++;
                if (i==0 && j>0 && arr[i][j-1]==0) sum++;
                if (j==0 && i>0 && arr[i-1][j]==0) sum++;
                if (j==0 && i==0) sum++;
            } 
        }
}
1
Demon55
1 / 1 / 0
Регистрация: 29.11.2013
Сообщений: 46
29.11.2013, 16:44  [ТС] #11
Всем спасибо, за помощь.
0
вадим 353
0 / 0 / 0
Регистрация: 08.12.2015
Сообщений: 5
20.12.2015, 13:14 #12
можете пожалуйста в делфи написать прогу эту..
0
20.12.2015, 13:14
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.12.2015, 13:14
Привет! Вот еще темы с ответами:

Посчитать общую длину отрезков заданных координатами начала и конца - C++
На координатной оси оХ заданны координаты начала и конца N отрезков. Координаты записаны в массив. Нужно посчитать общую длину отрезков....

Посчитать сумму только положительных из трёх заданных чисел (сделать с использованием while) - C++
Посчитать сумму только положительных из трех данных чисел.

Найти количество прямоугольников на листке в клеточку - C++
Здравствуйте!Есть задача.Смысл таков:вводим два числа A и B(0&lt;A&lt;=10^9,0&lt;B&lt;=10^9).Это размеры листка.Нужно найти количество прямоугольников...

Посчитать количество всех букв и количество вхождений каждой буквы - C++
Есть файл из нескольких строк. нужно: 1 посчитать количество всех букв 2 посчитать количество каждой из букв (abcd) Проблема:...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.