Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
Person1

Определить количество «особых» элементов матрицы

18.03.2014, 22:42. Показов 2240. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста. Ну никак не могу разобраться с заданием.

Задана матрица размером MxN. Определить k – количество «особых» элементов матрицы, считая элемент «особым», если в его строке слева от него находятся элементы меньше его, а справа – больше.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
18.03.2014, 22:42
Ответы с готовыми решениями:

Определить количество «особых» элементов матрицы
Задание: дана матрица размером N * M. . Определить количество «особых» элементов матрицы, считая элемент «особым», если он больше суммы...

Определить количество и координаты особых элементов матрицы
Дана матрица размером m*n, определить количество и координаты особых элементов матрицы. Элемент считается особым, если он больше суммы...

Найти количество особых элементов матрицы
Здравствуйте! Дана целочисленная матрица А размером MxN. Элемент Аij назовем особым, если он равен сумме остальных элементов i-ой строки....

15
Life Builder
 Аватар для sk007
531 / 496 / 374
Регистрация: 12.01.2011
Сообщений: 1,755
19.03.2014, 14:10
Вроде так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int[] mass = {1, 2, 3, 5, 10, 6 , 7 };
            int kol = 0;
 
            for (int i = 1; i < mass.Length-1; i++)
            {
                if (mass[i - 1] < mass[i] && mass[i] < mass[i + 1])
                {
                    kol++;
                }
            }
 
            Console.WriteLine(kol);
            Console.ReadKey();
Добавлено через 14 минут
Цитата Сообщение от Person1 Посмотреть сообщение
Задана матрица размером MxN.
Извиняюсь что-то пропустил эту часть
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int[,] mass = {
                          {1, 2, 3, 5, 10}, 
                          {6 , 7, 8, 1, 1}, 
                          {6 , 7, 8, 1, 1} 
                          };
            int kol = 0;
 
            for (int j = 0; j < mass.GetLength(0); j++)
            {
                for (int i = 1; i < mass.GetLength(1) - 1; i++)
                {
                    if (mass[j, i - 1] < mass[j, i] && mass[j, i] < mass[j, i + 1])
                    {
                        kol++;
                    }
                }
            }
 
            Console.WriteLine(kol);
            Console.ReadKey();
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.03.2014, 14:18
sk007, вы проверяете в пределах одного шага, по заданию требуется, чтобы слева вообще не было элементов больше, а справа - вообще не было элементов меньше.
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
19.03.2014, 15:06
Person1, долго пытался вывести алгоритм, но ничего красивого не получилось, максимум так:
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
static class Program
{
    private static void Main(string[] args)
    {
        int[,] array = {{1, 2, 3}, {4, 6, 5}, {9, 8, 7}};
        Console.WriteLine(array.SpecialElementsCount());
        Console.ReadKey();
    }
 
    public static int SpecialElementsCount<T>(this T[,] array)
        where T : IComparable<T>
    {
        int count = 0;
        int n = array.GetLength(0), m = array.GetLength(1);
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++)
            {
                int temp = 1;
                for (int k = 0; k < m; k++)
                    if (j.CompareTo(k) == -array[i, j].CompareTo(array[i, k]))
                        temp--;
                if (temp == 0) count++;
            }
        return count;
    }
}
0
Заблокирован
19.03.2014, 16:48
Person1, ограничения на то, что все элементы различны нет?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.03.2014, 19:05
rattrapper, можно просто составить цепочки неубывания, а затем посчитать их длины...
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
19.03.2014, 19:11
Цитата Сообщение от Psilon Посмотреть сообщение
составить цепочки неубывания
подкинете ссылок для размышлений, ну или на словах хотя бы, а то гугл подвел
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.03.2014, 19:25
rattrapper, ну пусть у нас есть массив с первой строкой {1 2 3 1 2 4}
тут есть 2 цепочки неубывания - 1 2 3 и 1 2 4. В нашем случае ответ будет "1", потому что левая цепочка "Невалидная" (1 < 3), правая - валидная, но только для 4 выполняется условие 3<1<2, значит подходящая цепочка - 4.

Добавлено через 2 минуты
Если взять массив {1 2 4 1 2 3} ответ будет 0, потому что первая цепочка 1 2 4 - валидная, а вторая - 1 2 3 - нет, но ни для 1 элемента цепочки не выполняется условия ai - 1 <= ai <= ai + 1

Добавлено через 1 минуту
но никакого толкового алогоритма быстрее O(n3) в голову пока не лезет
0
Заблокирован
19.03.2014, 19:29
Цитата Сообщение от Psilon Посмотреть сообщение
rattrapper, можно просто составить цепочки неубывания, а затем посчитать их длины...
Psilon, в таком случае если на конце будет (из примера) стоять две 4, то особых эл-тов будет 0 или 1, в зависимости считать ли граничные особыми.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.03.2014, 19:30
Ev_Hyper, именно так.
0
Заблокирован
19.03.2014, 19:33
Psilon, я к тому, что поиск неубывающих цепочек не сработает в таких условиях
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.03.2014, 19:36
Ev_Hyper, во-первых граничные случаи нетрудно определить. А во-вторых...

Вообще имхо подход должен быть такой: идем как в шейкерной сортировке с обоих концов одновременно. Тогда можем за O(n2) попробовать сделать
0
Заблокирован
19.03.2014, 19:40
rattrapper,
C#
1
 int[,] array = { { 1, 3, 3 }, { 4, 6, 5 }, { 9, 8, 7 } };
Code
1
4
Добавлено через 1 минуту
Цитата Сообщение от Psilon Посмотреть сообщение
Ev_Hyper, во-первых граничные случаи нетрудно определить.
Psilon, )я про то, что слева от 0-элемента ничего не находится. Его считать за особый или нет?
0
foo();
 Аватар для rattrapper
886 / 587 / 222
Регистрация: 03.07.2013
Сообщений: 1,549
Записей в блоге: 2
19.03.2014, 19:45
Ev_Hyper, честно говоря, я в своем коде отталкивался от этого:
Цитата Сообщение от Psilon Посмотреть сообщение
слева вообще не было элементов больше, а справа - вообще не было элементов меньше
цепляясь за каждое "не"
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
19.03.2014, 19:49
Ev_Hyper, считать. Уверен
что касается моей реализации, можно было и с IComparable<T>, но так красивше имхо
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
        static void Main(string[] args)
        {
            int[,] array = { { 1, 3, 3 }, { 4, 6, 5 }, { 9, 8, 7 } };
            var elms = GetSpecialElementsCount(array);
            Console.WriteLine(elms);
        }
 
        private static int GetSpecialElementsCount(int[,] array)
        {
            int count = 0;
            for (int i = 0; i < array.GetLength(0); i++)
                for (int j = 0; j < array.GetLength(1); j++)
                    if (IsSpecialElement(array, i, j))
                        count++;
            return count;
        }
 
        private static bool IsSpecialElement(int[,] array, int i, int j)
        {
            for (int k = j - 1; k >= 0; k--)
                if (array[i, k] > array[i, j])
                    return false;
            for (int k = j + 1; k < array.GetLength(1); k++)
                if (array[i, k] < array[i, j])
                    return false;
            return true;
        }
Добавлено через 32 секунды
4 правильный ответ, вся первая строчка и 4. Если должны быть строго меньше или больше, то меняем < на <=
0
Заблокирован
19.03.2014, 19:57
Psilon, я тоже так думаю, но мало ли вдруг есть спорщики
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.03.2014, 19:57
Помогаю со студенческими работами здесь

Определить количество особых элементов массива
Дана матрица размером nxn. Определить количество особых элементов массива, считая его элемент особым, если он больше суммы остальных...

Матрица А размером m x n. Определить k - количество особых элементов массива А
Дана матрица А размером m x n. Определить k - количество особых элементов массива А, считая его элемент особым, если он больше суммы...

Определить количество "особых" элементов в матрице
Дана вещественная матрица А размерности n х m. Определить k — количество &quot;особых&quot; элементов массива А, считая его элемент особым, если...

Преобразовать из C++ в C#: Найти количество особых элементов
Прошу помочь с преобразованием кода. Буду благодарен любому ответу и совету. Изначальное задание имеет следующее условие: Назовем...

Преобразовать из C++ в C#: Найти количество особых элементов
Прошу помочь с преобразованием кода. Буду благодарен любому ответу и совету. Изначальное задание имеет следующее условие: Назовем...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru