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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ подскажите почему программа работает неправильно http://www.cyberforum.ru/cpp-beginners/thread370478.html
Использование двумерного массива как аргумента функции и возвращаемого значения функции выдает предупреждение:1>------ Build started: Project: Glushkov_double_massive_and_func, Configuration: Debug Win32 ------ 1> tredfy.cpp 1>f:\projects си++\glushkov_double_massive_and_func\glushkov_double_massive_and_func\tredfy.cpp(18): warning C4996: 'scanf': This function or variable may be unsafe....
C++ бинарные деревья Вот у меня есть программа, которая создает бинарное дерево из массива целых чисел. #include <iostream> #include <conio.h> using namespace std; struct bin_tree { int value; bin_tree *left, *right; }*pHead = NULL; // óêàçàòåëü íà âåðøèíó ðàâåí íóëþ http://www.cyberforum.ru/cpp-beginners/thread370476.html
C++ Определить номер первого из столбцов матрицы, содержащих хотя бы один нулевой элемент
Задача с двумерным массивом на C (не C++). Дана целочисленная прямоугольная матрица. Определить номер первого из столбцов, содержащих хотя бы один нулевой элемент. Характеристикой строки целочисленной матрицы назовем сумму ее отрицательных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с убыванием характеристик. Если кто знает, помогите, пожалуйста!
C++ Динамическое выделение памяти в dll
Читая Рихтера наткнулся вот на такое замечание:NOTE: Важно понимать, что единое адресное пространство состоит из одного исполняемого модуля и нескольких DLL-модулей. Одни из них могут быть скомпонованы со статически подключаемой библиотекой С/С++, другие — с 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
Эксперт С++
 Аватар для Mr.X
2805 / 1581 / 248
Регистрация: 03.05.2010
Сообщений: 3,684
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);
}
 
Текущее время: 21:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru