Найти номер первой из строк, не содержащих ни одного положительного элемента [требует правки]

255
30 марта 2017, 21:57

Есть матрица M x N, нужно найти номер первой из строк, не содержащих ни одного положительного элемента.Спасибо! Застрял...

Answer 1

В этой демонстрационной программе показано, как найти в матрице строку, не содержащую ни одного положительного элемента, с помощью стандартных алгоритмов и обычных циклов.

#include <iostream>
#include <iomanip>
#include <functional>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <ctime>
int main() 
{
    const size_t M = 20;
    const size_t N = 6;
    int a[M][N];
    std::srand( ( unsigned int )std::time( nullptr ) );
    for ( auto &row : a )
    {
        for ( int &x : row ) x = std::rand() % int( M * N ) - int( M * N / 2 );
    }
    for ( const auto &row : a )
    {
        for ( int x : row ) std::cout << std::setw( 3 ) << x << ' ';
        std::cout << std::endl;
    }
    auto all_non_positive = []( const auto &row )
    {
        return std::none_of( std::begin( row ), std::end( row ), 
                             std::bind2nd( std::greater<int>(), 0 ) );
    };
    auto it = std::find_if( std::begin( a ), std::end( a ), all_non_positive );
    if ( it == std::end( a ) )
    {
        std::cout << "There is no row that does not contain positive numbers" << std::endl;
    }
    else
    {
        std::cout << "Row #" << std::distance( std::begin( a ), it )
                  << " contains only non-positive numbers" << std::endl;
    }
    bool found = false;
    size_t i = 0;
    for ( ; not found && i < M; i += not found )
    {
        size_t j = 0;
        while ( j < N && a[i][j] <= 0 ) ++j;
        found = j == N;
    }
    if ( not found )
    {
        std::cout << "There is no row that does not contain positive numbers" << std::endl;
    }
    else
    {
        std::cout << "Row #" << i
                  << " contains only non-positive numbers" << std::endl;
    }
    return 0;
}

Вывод программы на консоль может выглядеть следующим образом

-46   8 -10 -48  -6 -44 
 49  46 -35 -21   9 -41 
 50   7  27  31  -4 -38 
 21 -13  47 -52  35 -27 
 53  19 -22 -17  54  48 
-58 -60  -4 -16 -55  42 
  0  54  21  17 -27 -30 
 28 -44  29 -12  39 -43 
 10   0   4 -11   0 -20 
 22  -7  59  53  28  45 
 41  30  46 -31 -54  51 
-48  -1  37  33 -44 -58 
 55  45 -42  24 -27  57 
 34  35 -11 -22 -36  49 
 18  39 -25   9  32 -57 
 -5   5  26 -19  34  32 
-36  38 -37 -59   3 -20 
-57 -10 -43 -46 -53 -18 
-57  41 -43 -15 -41 -27 
-26  30 -56   9 -21  28 
Row #17 contains only non-positive numbers
Row #17 contains only non-positive numbers
READ ALSO
Нужна программа для считывания данных с внешнего сайта [требует правки]

Нужна программа для считывания данных с внешнего сайта [требует правки]

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

196
Не работает рандом

Не работает рандом

Создал переменную, сделал её рандомной, выдаёт всегда 5, сколько бы ты не писал startПодскажите пожалуйста, где проблема?

273
Не собирается yandex phantom

Не собирается yandex phantom

Скачал исходники веб-сервера phantom для яндекстанка

238
Не могу понять функции С++

Не могу понять функции С++

https://code-liveru/post/cpp-functions/#more - здесь читаю, не могу понять функции с возвращением значения

289