Форум программистов, компьютерный форум CyberForum.ru

Найти площадь крупнейшего сплошного прямоугольника суши - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Ошибка при компиляции(Тестирование памяти) http://www.cyberforum.ru/cpp-beginners/thread712291.html
error C3861: 'ReadMemory': identifier not found(на MSDN написано что нужно подключить то та-то) Подключаю одну из двух написанных(If you are writing a WdbgExts extension, include wdbgexts.h. If you are writing a DbgEng extension that calls this function, include wdbgexts.h before dbgeng.h) wdbgexts.h- подключаю пишет ": fatal error C1083: Cannot open include file: 'wdbgexts.h': No such file...
C++ Нахождение разных чисел в массиве помогите пожалуйста пересести на с++ program p3; uses crt; var a:array of integer; i,j,n,z,l:integer; begin http://www.cyberforum.ru/cpp-beginners/thread712287.html
C++ Упорядочить строки матрицы по возрастанию их первых элементов
В работе память для массива должна выделяться динамически. На экран выводить исходные данные и результат. Дана матрица размером NxM. Упорядочить ее строки по возрастанию их первых элементов. #include "iostream.h" #include "iomanip.h" #include "math.h"
Сумма ряда C++
Вычислить сумму первых n членов ряда, где n-ный член ряда вычисляется по формуле (x^n)/n. Суть проблемы: дальше определённого значения вычисления не идут. Например, для числа 2 сумма не получается больше 6.389057, для 3 - больше 19.085539, и т.д. #include <stdio.h> #include <conio.h> int main() { int i=1, n; float x, sum=0, xn=1;
C++ создание классов http://www.cyberforum.ru/cpp-beginners/thread712280.html
Создать класс Зачет, имеющий поля: название предмета, зачет (лог. поле). Создать производный класс Экзамен, имеющий поле оценка
C++ можно ли считать данный код реализацией очереди можно ли считать данный код реализацией очереди. и если нет, то почему. #include <stdlib.h> #include <stdio.h> typedef struct LIST{ int val; struct LIST *ptr; }; подробнее

Показать сообщение отдельно
Schizorb
509 / 461 / 16
Регистрация: 07.04.2012
Сообщений: 865
Записей в блоге: 1
Завершенные тесты: 1
05.12.2012, 20:43     Найти площадь крупнейшего сплошного прямоугольника суши
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
 
int main()
{   
    const int rows = 7, cols = 8;
 
    int arr[rows][cols] = 
    {
        {0,1,1,1,0,1,1,1}, 
        {1,1,1,1,0,1,1,1},
        {1,1,1,1,1,1,0,1},
        {1,1,1,1,1,1,0,1},
        {0,1,1,1,1,1,1,1},
        {1,0,1,1,1,1,1,1},
        {1,1,0,1,1,1,1,1},
    };
 
    int i, j, k, jj, ii;
    int square, max_square = 0;
    bool find_null;
    
    for(i = 0; i < rows; ++i)
    {
        for(j = 0; j < cols; ++j)
        {
            std::cout << arr[i][j] << " ";
        }
        std::cout << "\n";
    }
    std::cout << "\n\n";
    
    for(i = 0; i < rows; ++i)
    {
        for(j = 0; j < cols; ++j)
        {
            if(arr[i][j] == 1)
            {
                jj = j + 1;
                
                while(arr[i][jj] == 1 && jj < cols)
                {   
                    ++jj;
                } 
                
                ii = i + 1;
                      
                find_null = false;
                
                while(ii < rows)
                {
                    for(k = jj - 1; k >= j; --k)
                    {
                        if(arr[ii][k] == 0)
                        {
                            find_null = true;
                            break;
                        }    
                    }
                    if(find_null)
                        break;
                        
                    ++ii;                  
                }
                
                square = (jj - j) * (ii - i);
 
                if(square > max_square)
                    max_square = square;    
            }
        }
        
    }
    
    std::cout << "Max square = " << max_square << "\n";
    
    return 0;
}
Возможно решение не самое удачное и запутанное. Принцип примерно такой:
*Просматриваем все элементы в цикле.
*Если встречаем 1, то считаем единицы справа от нее до нуля (находим горизонтальную строчку единиц).
*Переходим на строку ниже и проверяем соответствующий диапазон столбцов, если встречаем 0 - прекращаем подсчет, иначе проверяем следующую строку (в цикле).

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