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

Поиск повторного элемента в двумерном массиве

12.09.2015, 12:56. Показов 3622. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые форумчане!

У меня появился новый вопрос о двумерном массиве - задача состоит в поиске.

Задача: Нужно найти такие элементы в матрице которые не повторяются и вписать их в одномерный массив.

хотелось бы получить алгоритмический подход к решению задачи - примитивный поиск, и установка найденных данных в одномерный массив.

Откровенно говоря я уже замучился )) - пока еще не удалось самостоятельно решить.

мой алгоритм таков:
m[0, 0] - пройдись по всем ячейкам матрицы от m[0, 1] до m[n, n] если не нашел то - arr[0] = m[0, 0]
m[0, 1] - пройдись по всем ячейкам матрицы от m[0, 2] до m[n, n] если не нашел то - arr[1] = m[0, 1]
m[0, 2] - пройдись по всем ячейкам матрицы от m[1, 0] до m[n, n] если не нашел то - arr[2] = m[0, 2]
m[1, 0] - пройдись по всем ячейкам матрицы от m[1, 1] до m[n, n] если не нашел то - arr[3] = m[1, 0]

......... и так до m[n, n - 1]

у меня не получается реализовать такой код, может кто-то сможет помоч?

приложил картинки - для визуализации...

заранее благодарю .
Миниатюры
Поиск повторного элемента в двумерном массиве   Поиск повторного элемента в двумерном массиве   Поиск повторного элемента в двумерном массиве  

Поиск повторного элемента в двумерном массиве   Поиск повторного элемента в двумерном массиве  
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.09.2015, 12:56
Ответы с готовыми решениями:

Поиск элемента в двумерном массиве
Здравствуйте всем! У меня вопрос по поводу двумерных массивов. И так мне нужно найти такой элемент в двумерном массиве, что...

Тройной поиск элемента в двумерном массиве
Привет уважаемым форумчанам )! Допустим у меня есть упорядоченный массив из 24 элементов, я хочу найти такой элемент, у которого...

Поиск ближайшего равного элемента в двумерном массиве
Дается двумерный массив чисел и два числа - координаты элемента массива. Нужно найти ближайший элемент к данному, с таким же значением. ...

10
Заблокирован
12.09.2015, 13:15
Morris,
C#
1
2
3
4
5
                array.OfType<double>()
                .GroupBy(x => x)
                .Where(x => x.Count() == 1)
                .SelectMany(x => x)
                .ToArray();
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18307 / 14231 / 5368
Регистрация: 17.03.2014
Сообщений: 28,904
Записей в блоге: 1
12.09.2015, 13:16
Morris, как вариант:
C#
1
2
3
4
5
6
7
8
int[,] numbers = new[,] { {7,5,1}, {2,3,7}, {4,2,3}};
var e = numbers.GetEnumerator();
HashSet<int> tempUnique = new HashSet<int>();
while (e.MoveNext())
{
    tempUnique.Add((int)e.Current);
}
int[] unique = tempUnique.ToArray();
или через LINQ:
C#
1
2
int[,] numbers = new[,] { {7,5,1}, {2,3,7}, {4,2,3}};
int[] unique = numbers.OfType<int>().Distinct().ToArray();
1
12.09.2015, 13:34

Не по теме:

Меня всегда удивляло: зачем давать решения с LINQ или с HashSet, для алгоритмичесикх задач? Студентов учат делать элементарные операции - перебор элементов массива, работа с индексами, с двумерными массивами и т.д. Неужели вы думаете, что ему помогут LINQ или HashSet, которые студент не поймет и которые не дадут ему элементарных навыков работы с массивами?

0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
12.09.2015, 13:45
Morris, не совсем по теме, но судя по скринам, вы делаете решалку для Судоку.
Дональд Кнут еще в 2000 году предложил алгоритм "Dancing Links" (Танцующие Звенья) для эффективного решения задач о точном покрытии, в число которых попадает и Судоку.
1
15 / 4 / 2
Регистрация: 01.12.2010
Сообщений: 157
12.09.2015, 13:59  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
Не по теме:
Меня всегда удивляло: зачем давать решения с LINQ или с HashSet, для алгоритмичесикх задач? Студентов учат делать элементарные операции - перебор элементов массива, работа с индексами, с двумерными массивами
Скажите, а вы вас есть решение к такой проблеме без применения технологических возможностей?

Добавлено через 1 минуту
Цитата Сообщение от kolorotur Посмотреть сообщение
Morris, не совсем по теме, но судя по скринам
Нет, мне нужно решить задачу.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
12.09.2015, 14:40
Лучший ответ Сообщение было отмечено Morris как решение

Решение

Цитата Сообщение от Morris Посмотреть сообщение
есть решение к такой проблеме без применения технологических возможностей?
Конечно есть:
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
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication198
{
    internal class Program
    {
        static void Main(string[] args)
        {
            int[,] matrix = new int[,]
                                {
                                    { 7, 5, 1 }, 
                                    { 2, 3, 7 }, 
                                    { 4, 2, 3 }
                                };
 
            //создаем результирующий массив
            List<int> res = new List<int>();
 
            //перебираем все элементы матрицы
            for(int i=0;i< matrix.GetLength(0);i++)
            for(int j=0;j< matrix.GetLength(1);j++)
            {
                //получаем элемент
                int v = matrix[i, j];
                //считаем сколько таких элементов
                int count = CalcCount(matrix, v);
                if (count == 1)//если он ровно один
                    res.Add(v);//добавляем в результирующий список
            }
 
            //выводим результат
            Console.WriteLine(string.Join(", ", res));
            Console.ReadLine();
        }
 
        //подсчет числа элемнтов, равных данному
        static int CalcCount(int[,] matrix, int v)
        {
            int count = 0;
 
            //перебираем все элементы матрицы
            for(int i=0;i<matrix.GetLength(0);i++)
            for(int j=0;j<matrix.GetLength(1);j++)
            if(matrix[i, j] == v)//если элемент равен искомому
                count++;//увеличиваем счетчик
 
            return count;
        }
    }
}
1
Заблокирован
12.09.2015, 15:51
C#
1
2
3
4
5
6
7
8
9
10
11
12
  int[,] array = {
                {1,2 },
                {2,3 },
                {1,5 },
                {4,4 }
            };
 
            foreach (var val in from a in array.Cast<int>()
                                group a by a into g
                                where g.Count() == 1
                                select g.Key)
                Console.WriteLine(val);
0
15 / 4 / 2
Регистрация: 01.12.2010
Сообщений: 157
13.09.2015, 11:52  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
равных данному
Спасибо!!)) - ща будем разбираться....

Добавлено через 2 минуты
Спасибо за советы ..!

Добавлено через 59 минут
Цитата Сообщение от Morris Посмотреть сообщение
Storm23
Разобрался.... - работает хорошо, а у меня в голове было другое представление о решении такой задачи.
Когда бы взят 1 элемент, и просканирован в матрице от m[0,0] - m[2,2],
то 2 элемент пробежится от m[0,1] - m[2,2]
3 элемент пробежится от m[0,2] - m[2,2]
4 элемент пробежится от m[1,0] - m[2,2]

по принципу одномерного массива - для нахождения элемента в одномерном массиве в зачастую используется двойной цикл, а для двумерного массива, думал аналогично - нужно использовать тройной цикл.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
13.09.2015, 12:00
Цитата Сообщение от Morris Посмотреть сообщение
Разобрался.... - работает хорошо, а у меня в голове было другое представление о решении такой задачи.
Когда бы взят 1 элемент, и просканирован в матрице от m[0,0] - m[2,2],
то 2 элемент пробежится от m[0,1] - m[2,2]
3 элемент пробежится от m[0,2] - m[2,2]
4 элемент пробежится от m[1,0] - m[2,2]
по принципу одномерного массива - для нахождения элемента в одномерном массиве в зачастую используется двойной цикл, а для двумерного массива, думал аналогично - нужно использовать тройной цикл.
1) Не тройной а четверной.
2) Ваш алгоритм (как вы его описаываете по кр мере) - неправильный. Допустим мы доходим до числа 7, которые находится в третьей колонке второй строки. Начинаем искать семерки после этого значения. И не находим, потому что вторая семерка находится до этого. В результате, 7 заносится как уникальная в рез массив, что неправильно. Из этой ситуации можно выйти, если завести еще один массив, в котором отмечать те значений, которые уже совпадали ранее, но тогда увеличиваются расходы на память.
3) Сложность алгоритма что в вашем варианте, что в моем - O(n^2)
4) С помощью хеш-таблиц, алгоритм можно довести до O(n) (но не тот вариант, что в посте #3, там неправильно).
1
15 / 4 / 2
Регистрация: 01.12.2010
Сообщений: 157
13.09.2015, 12:10  [ТС]
Цитата Сообщение от Storm23 Посмотреть сообщение
Допустим мы доходим до числа 7, которые находится в третьей колонке второй строки. Начинаем искать семерки после этого значения
я видел эту проблему, но не додумался как ее исправить , и тоже думал о резервном массиве, но что-то показалось, что это будет дремучий лес. и отошел от него , а в голове все же отложилось...)).
Спасибо за подробное разъяснение.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.09.2015, 12:10
Помогаю со студенческими работами здесь

Поиск максимального элемента в двумерном массиве
Public Function Max(ByVal ArrM(,) As Integer) As Integer Dim C1, C2 As Integer Dim NMax As Integer = 0 For...

Поиск максимального элемента в двумерном массиве
Написать программу поиска в двумерном массиве максимального и минимального элемента массива. Массив должен быть динамическим. Реализовать...

Поиск максимального элемента в двумерном массиве
Здравствуйте! Собственно вопрос - оптимальный алгоритм. Есть ли тут вообще алгоритм который находит быстрее чем перебором за O(mxn)

Поиск введенного с клавиатуры элемента в двумерном массиве
надо найти в массиве элемент введенный с клавиатуры. пожалуйста, помогите:sorry: if (a != NULL) { for (int i = 0; i &lt; N; i++)...

Поиск максимального по модулю элемента в двумерном массиве
Почему для нахождения наибольшего по модулю элемента используется нулевая ячейка arr? int max = abs(arr); for (int i = 0; i...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
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. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru