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

Задача о прямоугольниках С++ - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ подскажите почему программа работает неправильно http://www.cyberforum.ru/cpp-beginners/thread370478.html
Использование двумерного массива как аргумента функции и возвращаемого значения функции выдает предупреждение:1>------ Build started: Project: Glushkov_double_massive_and_func, Configuration:...
C++ бинарные деревья Вот у меня есть программа, которая создает бинарное дерево из массива целых чисел. #include <iostream> #include <conio.h> using namespace std; struct bin_tree { int value; bin_tree... http://www.cyberforum.ru/cpp-beginners/thread370476.html
C++ Определить номер первого из столбцов матрицы, содержащих хотя бы один нулевой элемент
Задача с двумерным массивом на C (не C++). Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент. Характеристикой строки...
C++ Динамическое выделение памяти в dll
Читая Рихтера наткнулся вот на такое замечание:NOTE: Важно понимать, что единое адресное пространство состоит из одного исполняемого модуля и нескольких DLL-модулей. Одни из них могут быть...
C++ Транспонирование матрицы http://www.cyberforum.ru/cpp-beginners/thread370438.html
int _tmain(int argc, _TCHAR* argv) { const int n=5; int a; srand(GetTickCount()); for (int i=0; i < n; i++) for (int j=0; j < n; j++) a=rand()%10; for (int i=0;i<n;i++) {
C++ Перегрузка оператора ==, в классе Матрица #ifndef MATRIX_H #define MATRIX_H template <class T> class Matrix { public: Matrix(int Rows, int Cols); ~Matrix(); int RowsCount()const; подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
23.10.2011, 01:36
Цитата Сообщение от valeriikozlov Посмотреть сообщение
На самом деле проще (и быстрее) в этом случае подсчитать кол-во верхних левых вершин прямоугольников.
Тоже пришла такая мысль. Реализовал так:
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
78
79
80
81
82
83
/////////////////////////////////////////////////////////////////////////////////////////
//На клеточном листе бумаги размером MхN расположены прямоугольники. 
//Задан массив MхN в котором элемент a[i,j]=1 если клетка листа (i,j) 
//яв-ся частью прямоугольника, и a[i,j]=0 если это пустая клетка. 
//Напечатать число прямоугольников.
/////////////////////////////////////////////////////////////////////////////////////////
//В моей реализации нули и единицы в исходный файл записывать без пробелов.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <fstream>
#include <iostream>
#include <iterator>
#include <string>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string         T_str;
typedef std::vector<T_str>  T_strings;
/////////////////////////////////////////////////////////////////////////////////////////
bool  is_left_upper_corner
    (
        const T_strings&    strings, 
        int                 i, 
        int                 j
    )
{
    return      strings[i][j]               == '1'
 
            &&  (
                        i                   ==  0 
                    ||  strings[i - 1][j]   == '0'
                )
 
            &&  (
                        j                   ==  0
                    ||  strings[i][j - 1]   == '0'
                );
}
/////////////////////////////////////////////////////////////////////////////////////////
void  count_rectangles
    (
        const T_str&  ifilename, 
        const T_str&  ofilename
    )
{
    std::ifstream  ifile( ifilename.c_str() );
    if( !ifile )
    {
        std::cout << "Невозможно открыть файл \""
                  << ifilename
                  << "\"."
                  << std::endl;
    }
 
    T_strings   strings;
    std::copy
        (
            std::istream_iterator<T_str>    (ifile),
            std::istream_iterator<T_str>    (),
            std::back_inserter              (strings)
        );
 
    int  counter = 0;
    for(int  i = 0; i < strings.size(); ++i)
    {
        for(int  j = 0; j < strings[i].size(); ++j)
        {            
            if( is_left_upper_corner(strings, i, j) )
            {
                ++counter;
            }
        }
    }
    std::ofstream  ofile( ofilename.c_str() );
    ofile << counter;
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    const T_str  ifilename = "if.txt";  
    const T_str  ofilename = "of.txt";
    count_rectangles(ifilename, ofilename);
}
3
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru