Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.12.2011, 13:42   #1
Sylar9
Форумчанин
 
Регистрация: 22.10.2011
Сообщений: 252
Вопрос количество строк, в которых нет ни одного нулевого элемента в матрице

Здравствуйте уважаемые программисты. Помогите разобраться с одной задачей.
Дана матрица размером МxN. Определить количество строк, в которых нет ни одного нулевого элемента.
Вот я код написал:
Код:
#include <iostream>
#include <algorithm>
using namespace std;
 
int main()
{
    const int maxRows = 100;
    const int maxCols = 100;
    int arr[maxRows][maxCols];
    int rows, cols;
    cin >> rows >> cols;
    for(int i = 0; i < rows; ++i)
        for(int j = 0; j < cols; ++j)
            cin >> arr[i][j];
 
    int count = 0;
    for(int i = 0; i < rows; ++i)
    if(find(&arr[i][0], &arr[i][cols], 0) == &arr[i][cols])
        ++count;
    cout << count << std::endl;
    system("pause");
	return 0;
}
Но препод сказал его переделать без библиотеке algorithm. То есть без вспомогательных функций.
Можно это как не будь переделать если да то как?
Sylar9 вне форума Ответить с цитированием
Старый 24.12.2011, 14:05   #2
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Как-то вот так:
Код:
    int count = 0;
    for(int i = 0; i < rows; i++)
    {
        int s = 0;
        for(int j = 0; j < cols; j++)
        {
            if(arr[i][j]==0) s++;
        }
        if(s == 0) count++;
    }
Можно и по-другому:
Код:
    int count = 0;
    for(int i = 0; i < rows; i++)
    {
        bool s = false;
        for(int j = 0; j < cols; j++)
        {
            if(arr[i][j]==0) {s = true; continue;}
        }
    if(!s) count++;
    }
Кстати, ++ нужно ставить после индекса, иначе вы начинаете работать с массивом с 1-го элемента.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 24.12.2011 в 14:12.
Smitt&Wesson вне форума Ответить с цитированием
Старый 24.12.2011, 14:55   #3
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Красивее подсчитывать строки, в которых есть хотя бы один нулевой элемент. Тогда не будет никаких флагов и их проверок + понятный break внутреннего цикла.

Цитата:
Кстати, ++ нужно ставить после индекса, иначе вы начинаете работать с массивом с 1-го элемента.
Кстати не нужно. На результат не влияет. Более того, если бы переменная цикла не была простым типом, то очевидно, что префиксная форма дала бы бОльшую производительность.
still_alive вне форума Ответить с цитированием
Старый 24.12.2011, 15:50   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от Smitt&Wesson Посмотреть сообщение
Кстати, ++ нужно ставить после индекса, иначе вы начинаете работать с массивом с 1-го элемента.
Ой ли? Аргументируйте.
_Bers вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В целочисленной матрице NxM в каждой строке определить числа, которых нет в следующей строке (Паскаль) Sheffdmb2010 Паскаль, Turbo Pascal, PascalABC.NET 3 21.10.2011 08:33
определить количество столбцов, не содержащих ни одного нулевого элемента Larka12 Помощь студентам 1 07.02.2011 20:52
Поиск мин элемента в матрице и его количество C++ Slavytich Помощь студентам 1 03.11.2010 13:51
посчитать количество строк в матрице M*N Таняпервокурсница Помощь студентам 4 03.06.2010 18:30
Си -Расположить элементы в порядке возрастания от первого нулевого элемента до отрицательного элемента Freia Помощь студентам 17 13.12.2009 15:41