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

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

Войти
Регистрация
Восстановить пароль
 
Pavel_1109
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 9
#1

В массиве m x n проверить, имеется ли по горизонтали и вертикали цепочка, состоящая подряд из 5 единиц - C++

18.06.2013, 09:13. Просмотров 381. Ответов 1
Метки нет (Все метки)

В массиве m x n проверить, имеется ли по горизонтали и вертикали цепочка, состоящая подряд из 5 единиц
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.06.2013, 09:13     В массиве m x n проверить, имеется ли по горизонтали и вертикали цепочка, состоящая подряд из 5 единиц
Посмотрите здесь:

Найти в матрице самую длинную цепочку подряд стоящих 0 по горизонтали или вертикали - C++
Матрица состоит из 0 и 1. Найти в ней самую длинную цепочку подряд стоящих 0 по горизонтали или вертикали. Для ориентации поиска...

Найдите в матрице самую длинную цепочку подряд идущих нулей по горизонтали и вертикали - C++
Матрица состоит из нулей и единиц. Найдите в ней самую длинную цепочку подряд идущих нулей по горизонтали, вертикали. Удалить...

Выяснить имеется ли в одном массиве 3 подряд одинаковых элемента - C++
Выяснить имеется ли в одном массиве 3 подряд одинаковых элемента

Имеется ли в целочисленном массиве два идущих подряд нуля? - C++
Имеется ли в целочисленном массиве два идущих подряд нуля? Ответ вывести в виде "ДА" или "НЕТ" Спасибо заранее, очень...

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

Проверить, имеется ли в двумерном числовом массиве - C++
Проверить, имеется ли в двумерном числовом массиве хотя бы одна пара противоположных соседних чисел

Проверить два идущих подряд нуля в массиве - C++
Как правильно проверить два идущих подряд нуля в массиве? Чтобы при выполнении условия один массив заполнялся данными из другого? Мои...

Проверить, имеется ли в массиве число, введенное пользователем. Если да – вывести его индекс - C++
кто-нибудь может подсказать как сделать? Язык С++. только мне по самому простому, только начинаю учить язык, через цикл for, и это...

Проверить имеется ли в массиве эл-мы, содержащие хотя бы одну пару взаимно обратных чисел - C++
Задан одномерный массив , состоящий из N вещественных элеметнов. Проверить имеется ли в массиве эл-мы, содержащие хотя бы одну пару взаимно...

Проверить, имеется ли в массиве хотя бы одна пара чисел, являющихся противоположными по знаку - C++
Используя указатели проверить, имеется ли в массиве хотя бы одна пара чисел, являющихся противоположными по знаку


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Thinker
Эксперт C++
4223 / 2197 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
18.06.2013, 10:16     В массиве m x n проверить, имеется ли по горизонтали и вертикали цепочка, состоящая подряд из 5 единиц #2
с адресной арифметикой интереснее решать эту задачу
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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define M 10
#define N 15
#define K 5
 
void Init(int *a, int *end)
{
   if (a < end)
   {
      *a = rand() % 4;
      Init(a + 1, end);
   }
}
 
void Print(int a[M][N], int m, int n)
{
   int i, j;
   for(i = 0; i < m; ++i)
   {
      for(j = 0; j < n; ++j)
         printf("%4d", a[i][j]);
      putchar('\n');
   }
}
 
int Count1(int *a, int *end)
{
   return a < end && *a == 1 ? 1 + Count1(a + 1, end) : 0;
}
 
int Count2(int *a, int *end)
{
   return a < end && *a == 1 ? 1 + Count2(a + N, end) : 0;
}
 
int main()
{
   int a[M][N], i, j, flag = 0;
   srand(time(NULL));
   Init(*a, *a + M*N);
   Print(a, M, N);
   for(i = 0; i < M - K + 1; ++i)
      for(j = 0; j < N - K + 1; ++j)
         if (Count1(*(a + i) + j, *(a + i) + N) >= K || Count2(*(a + i) + j, *(a + M) + j) >= K)
            flag = 1;
   puts(flag ? "yes" : "no");
   return 0;
}
Ответ Создать тему
Опции темы

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