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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
#1

Необходимо подсчитать количество строк матрицы, которые не содержат ни одного 0 элемента. - C++

23.12.2008, 11:00. Просмотров 2578. Ответов 19
Метки нет (Все метки)

Ребята, помогите пожалуйста разобраться с задачкой.

Дана целочисленная матрица nxm. Необходимо подсчитать количество строк, которые не содержат ни одного 0 элемента.

Мои мысли таковы. Матрицу уже сформировала.
Для подсчета, такая идея: По циклу нахожу нулевые элементы (mas[i][j]==0)
и заношу их в новый одномерный массив. Далее подсчитываю там количество неповторяющихся элементов (это будет количество строк, содержащих нулевые элементы)
Ну а потом из всего количества строк, вычитаю эти строки и получу, количество строк, где нет 0 элементов.

Не знаю, может я очень сложно придумала и есть что-то проще.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.12.2008, 11:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Необходимо подсчитать количество строк матрицы, которые не содержат ни одного 0 элемента. (C++):

Определить количество строк матрицы, которые не содержат ни одного нулевого элемента - C++
Пожалуйста помогите! Данная прямоугольная целочисленная матрица. определить: количество строк, которые не содержат ни одного нулевого...

Определить сумму элементов для тех строк, которые не содержат ни одного отрицательного элемента - C++
Написал код, но он строки не определяет, а просто плюсует положительные числа в строке... int a, min = -10, max = 40; for...

Подсчитать количество строк текстового файла f, которые содержат цифры - C++
Дано файл f.Подсчитать количество строк файла f, которые содержат цифры.

Скопировать из файла в файл все строки, которые не содержат цифры. Подсчитать количество строк по условию - C++
Скопировать из файла F1 в файл F2 все строки, которые не содержат цифры. Подсчитать количество строк, которые начинаются на букву «А» в...

Подсчитать количество отрицательных элементов в строках матрицы, которые содержат хотя бы один нулевой элемент - C++
#include "stdafx.h" #include <iostream> #include <conio.h> using namespace std; int main(int argc, char** argv) { int...

Определить количество строк матрицы, которые содержат хотя бы одну нулевую компоненту - C++
Дана матрица A(N,M). Определить количество рядков матрицы А,которая содержит хотя бы одну нулевую компоненту. Тип элементов: целые ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Lord_Voodoo
Супер-модератор
8589 / 2189 / 61
Регистрация: 07.03.2007
Сообщений: 10,890
Завершенные тесты: 1
23.12.2008, 11:28 #2
да все можно сделать просто... сканируем матрицу... нашли в строке 0, от общего кол-ва отнимаем единицу, переходим на новую строку... и так до конца... что останется - это нужное кол-во... так и быстрее и памяти меньше
0
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
23.12.2008, 12:21  [ТС] #3
Ммм....из общего количества вычесть 1 и перейти на новую строку.......

Это так примерно:
C++
1
2
3
4
5
for (i=0; i<n; i++)                     //строки
{ for (j=0; j<m; j++)                 //столбцы
   if (mas[i][j]==0)                    // элемент=0
       n=n-1;                            //из общего количества строк вычитаем 1
}
Просто к сожалению нет возможности проверить сейчас код, а понять надо сейчас :0))
0
Lord_Voodoo
Супер-модератор
8589 / 2189 / 61
Регистрация: 07.03.2007
Сообщений: 10,890
Завершенные тесты: 1
23.12.2008, 12:45 #4
нет, так не будет корректно, если 0 будет больше одного, надо еще и break поставить... чтобы сразу же после первого 0 был переход на другую строку
0
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
24.12.2008, 01:01  [ТС] #5
Спасибо большое за идею, вечером попробою зашкодить, надеюсь получится :0))))

Добавлено через 11 часов 56 минут 15 секунд
Ну вот, что-то никак не получается :0(((((((
0
XuTPbIu_MuHTAu
Эксперт С++
2225 / 740 / 10
Регистрация: 27.05.2008
Сообщений: 1,508
24.12.2008, 05:03 #6
C++
1
2
3
4
5
6
7
8
9
10
11
int i,j,k;
int n,m;
int ** matrix;
//....matrix being inputed
k=0;
for(i=0;i<n;i++) {
      j=0;
      while( matrix[i][j] && (++j < m ) );  /// looking throw the row number i
      if(j==m) k++; // if there were no zero elems increase counter.
};
///... output result
или
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
int i,j,k;
int n,m;
int ** matrix;
//....matrix being inputed
k=n;// k is an answer. first we set it to number of strings
for(i=0;i<n;i++) {
      for(j=0;j<m;j++) if(!matrix[i][j] ) {
                  k--;// if we found a zero in the string
                  break;// it doesnt fit the condition,so we decrease k. and go looking at  
                            //next str
           };
};
//.. output result
Примечание : в первом варианте используется "ленивость" оператора "И" - &&.
Т.Е если первое условие не выполнено,то второе не проверяется.
0
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
26.12.2008, 11:40  [ТС] #7
Пасибо большое, указателями пользоваться не стала, но правильно расставила скобочки и всё получилось :0)))

Не подскажите теперь как решить следующую половину этой задачки: "Найти в этой матрице максимальное число, которое встречается несколько раз"?

Как найти максимальное число, это понятно. Но оно не подойдет, если встертиться только один раз....
0
Lord_Voodoo
Супер-модератор
8589 / 2189 / 61
Регистрация: 07.03.2007
Сообщений: 10,890
Завершенные тесты: 1
26.12.2008, 11:43 #8
ну здесь тоже предлагаю самый простой способ, ищешь элемент, потом смотришь кол-во его вхождний в массив... если один в массив помешаешь... ну и потом уже ищешь максимальный элемент с учетом того, чтобы он не был из массива исключенных элементов...
0
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
09.01.2009, 23:55  [ТС] #9
WooDooMan,
Вот я и вернулась к задачке :0)

Ищу элемент и смотрю количество вхождений следующим образом:

C++
1
2
3
4
5
6
7
k=0;
for(int i=0;i<n;i++)
{for(int j=0;j<m;j++)
              if (mas[i][j])== mas[i][j+1])
              {
              k=k+1;
              };
if k=0 then , то получается число встречается один раз, значит его нужно поместить в массив,вот здесь ужно создать какой-то одномерный безразмерный массив или как?
0
igor_nf
118 / 12 / 1
Регистрация: 21.08.2007
Сообщений: 222
10.01.2009, 12:51 #10
Фактически, если отсортировать матрицу - потом найти максимальный элемент - встречающийся более одного раза - тривиально. Но сложность тогда получается вроде O(n) = n * log(n), где n - число элементов матрицы.

Должен быть способ побыстрее (думается, что намного побыстрее..).
0
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
10.01.2009, 20:50  [ТС] #11
черт, че-то никак не получается :'(, помогите плиииизззз

Добавлено через 4 минуты 20 секунд
Ой, а как еще можно переименовать тему:
"Найти в матрице максимальное число, которое встречается несколько раз", а то сейчас название темы не соответствует решаемой задаче.

Добавлено через 6 часов 4 минуты 41 секунду
Что-то молчат все сегодня

Хочу еще раз уточнить поставленную задачу и привести вариант решения:

Задача:
Дана целочисленная прямоугольная матрица размерности n на m. Определить количество строк, не содержащих ни одного нулевого элемента и максимальное из чисел, встречающихся в заданной матрице более одного раза.

Первая половина задачи решена, со второй проблемы.

Вот моё решение:

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
// Matrica.cpp : main project file.
 
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <cmath>
#include <time.h>
using namespace std;
void main()
{
//srand((unsigned)time(NULL));
//инициализация массива
const int n=5, m=6;
int p, max, i, j,el, max, ii, jj, m, k, s;
int mas[n][m], 
count={0};
//формируем массив...
for(int i=0;i<n;i++)
    for(int j=0;j<m;j++)
        mas[i][j]=rand()%15-5;
//...и выводим его на экран.
for(int i=0;i<n;i++)
    {cout<<"\n";
     for(int j=0;j<m;j++)
        cout<<mas[i][j]<<" ";
    };
 
//подсчет количества строк, не содержащих нулевых элементов
p=n;
for(int i=0;i<n;i++)
{ for(int j=0;j<m;j++)
 if (mas[i][j]==0)
              {
                 p--;
                 break;
              }; 
};
cout<<' '<<"\n";
cout<<' '<<"\n";
cout<<"Kol-vo strok, ne soderjashih ni odnogo nulevogo elementa =" <<p <<"\n";
 
// нахождение максимального элемента
max=mas[0][0];
for(int i=0;i<n;i++)
{for(int j=0;j<m;j++)
              if (max< mas[i][j])
              {
              max=mas[i][j];
              };
};
cout<<"Maximalniy element="<<max<<"\n";
 
//нахождение максимального элемента, встречающегося не менее 2-х раз
s=1;
k=1;
max=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
    el=mas[i][j]
    for(int ii=0;ii<n;ii++)
    for(int jj=0;jj<m;jj++)
    { (el==mas[ii][jj]) && (s==1)
       {if (i!=ii) || (j!=jj)
           {max=el;
            k=k+1;
            s=2;
    };
    }
else
if (el==mas[ii][jj])&&(el > max)
{
    max=el;
};
    };
};
if (k!=0) cout << "Maximalniy element="<<max<<"\n";
else cout << "Maximalniy element net";
}[
Почему-то в 72 строке выдаёт ошибку связанную с ";", не пойму почему:
else
if (el==mas[ii][jj])&&(el > max)
{
max=el;
};
0
manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
10.01.2009, 22:15 #12
В таком случае действительно удобнее упорядочить элементы матрицы, как было сказано ранее.
А затем работать не как с матрицей, а как с одномерным массивом (В таком случае мы ничего не выигрываем. Это только для удобства).

C++
1
2
3
4
5
6
for (int i=0; i<n*n-1; i++)
       if (A[i/n][i%n]==A[i/n][(i%n)+1])
       {
           cout << "maksimalnui element matricu" << A[j/n][j%n];
           break;
       }
Добавлено через 6 минут 22 секунды
Но этот цикл применим только для матрицы упорядоченной по убыванию. Иначе надо изменить условия цикла

Добавлено через 26 минут 14 секунд
Заметил ошибку в своем же коде

Код
if (A[i/n][i%n]==A[[COLOR="Red"](i+1)[/COLOR]/n][[COLOR="red"](i+1)[/COLOR]%n)
0
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
10.01.2009, 22:19  [ТС] #13
manfeese,
т.е мне сейчас надо упорядочить матрицу по убыванию и применить этот код.
Тогда должно получится?
0
manfeese
129 / 128 / 16
Регистрация: 04.01.2009
Сообщений: 415
10.01.2009, 22:39 #14
Да, вполне, только опять же, в конце моего кода не хватает квадратной скобки ]

А упорядочивать матрицу, я бы советовал тоже используя такую структуру "прогонки" массива.

Добавлено через 2 минуты 40 секунд
перепишу код заново и без ошибок!

C++
1
2
3
4
5
6
for (int i=0; i<n*n-1; i++)   
       if (A[i/n][i%n]==A[(i+1)/n][(i+1)%n])   
       {   
           cout << "maksimalnui element matricu" << A[i/n][i%n];   
           break;   
       }
Добавлено через 3 минуты 16 секунд
Цитата Сообщение от Умница++ Посмотреть сообщение
Почему-то в 72 строке выдаёт ошибку
Код
if [COLOR="red"]([/COLOR](el==mas[ii][jj])&&(el > max)[COLOR="Red"]) [/COLOR]
не хватало скобок
0
Умница++
0 / 0 / 0
Регистрация: 23.12.2008
Сообщений: 13
10.01.2009, 22:39  [ТС] #15

Уважаемый manfeese, может поможете мне тогда уж до конца.
Я же знаю, что вы умный и знаете как быстро упорядочить матрицу.
А то я тут всю ночь буду мучаться, а так спать хочется
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.01.2009, 22:39
Привет! Вот еще темы с ответами:

Найти количество столбцов матрицы, которые не имеют ни одного нулевого элемента - C++
дано целочисельную прямокутную матрицу.Найти: 1)Количество столбцов которые неимеют ниодново нульового елемента. 2)номер рядка в...

Определить количество строк матрицы, не содержащих ни одного нулевого элемента - C++
Дана целочисленная прямоугольная матрица.Определить: 1)Количество строк ,не содержащих ни одного нулевого элемента. 2)...

Определить количество строк матрицы, не содержащих ни одного нулевого элемента - C++
Дана целочисленная квадратная матрица. Определить: • количество строк, не содержащих ни одного нулевого элемента; • максимальное из...

Определить количество строк матрицы не содержащих ни одного отрицательного элемента - C++
Дана целочисленная прямоугольная матрица. Определить количество строк, не содержащих ни одного отрицательного элемента. Если таких строк...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
10.01.2009, 22:39
Ответ Создать тему
Опции темы

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