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

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

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.09.2016, 12:55   #1
Микле
Новичок
Джуниор
 
Регистрация: 25.09.2016
Сообщений: 1
По умолчанию C#: Найти минимальную позицию начала подмассива в заданном массиве, или вернуть (-1), если соответствие не обнаружено

Если подмассив найден в массиве, то вернуть нужно минимальный индекс, с которого начинается подмассив в исходном массиве. Например, поиск подмассива "3,4" в массиве "1,2,3,4,3,4" должен вернуть 2. Если подмассив не найден, то вернуть нужно -1. Считайте, что пустой подмассив содержится в любом массиве, начиная с индекса 0.


Код:
        public static void Main()
        {
            Console.WriteLine(FindSubarrayStartIndex(new[] { 100, 100, 100, 100 }, new[] { 100, 100 }));
            Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 2 }));
            Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 2, 3 }));
            Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 2 }));
            Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 2, 3 }));
            Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new[] { 1, 3 }));
            Console.WriteLine(FindSubarrayStartIndex(new[] { 1 }, new[] { 1, 2, 3 }));
            Console.WriteLine(FindSubarrayStartIndex(new int[0], new[] { 1, 2, 3 }));
            Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 3 }, new int[0]));
            Console.WriteLine(FindSubarrayStartIndex(new[] { 1, 2, 1, 2, 3 }, new[] { 1, 2, 3 }));
            Console.WriteLine(FindSubarrayStartIndex(new int[0], new int[0]));
        }

        public static int FindSubarrayStartIndex(int[] array, int[] subArray)
        {
            for (int i = 0; i < array.Length - subArray.Length + 1; i++)
                if (ContainsAtIndex(array, subArray, i)) return i;
            return -1;
        }

        public static int ContainsAtIndex(int[] array, int[] subArray, i)
        {
            for (int i = ; i < array.Length; i++)
            {
                for (j = 0; j < subArray.Length; j++)
                {

                }
            }
        }

Как искать отдельные элементы - понятно. А вот как задать поиск целого подмассива, ведь один элемент может совпадать, а другой нет. Скорее всего нужно использовать вложенный цикл, но какие действия он должен производить, непонятно. Подайте хотя б идею. FindSubarrayStartIndex - основной метод поиска, реализовать нужно ContainsAtIndex - который используется в нем

От модератора:
оформляйте код используя для этого тэг CODE

Последний раз редактировалось Пепел Феникса; 25.09.2016 в 13:00.
Микле вне форума Ответить с цитированием
Старый 25.09.2016, 13:03   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Код:
        public static bool ContainsAtIndex(int[] array, int[] subArray, int start)
        {
                for (j = 0; j < subArray.Length; j++)
                {
                    if(array[start]!=subArray[j];
                       return false;
                    start++;
                }
                return true;
        }
примерно так думаю.
но я не проверял
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти наибольшее и наименьшее значение функции y=3*x^2+x-4, если на заданном интервале от [a,b] х изменяется с шагом 0,1 Конь Антон Паскаль, Turbo Pascal, PascalABC.NET 3 06.03.2017 14:26
Паскаль ABC - в заданном вещественном массиве найти минимальное значение и отсортировать элементы левее него kinwood Помощь студентам 8 17.04.2013 07:27
программу нахождения экстремального элемента или его порядкового номера при заданном одномерном массиве А (Паскаль) S_S_V_N Помощь студентам 1 16.10.2011 21:54
максимальная сумма элементов подмассива в массиве Sparky Помощь студентам 11 05.11.2009 15:50
В заданном целочисленном двумерном массиве найти среднее арифметическое в каждой строке Rise Паскаль, Turbo Pascal, PascalABC.NET 3 06.01.2009 00:55