Изменение индекса в массиве - C#
Формулировка задачи:
Я разу не программист. У меня есть массив чисел размерностью 10. Он заполняется числами от 1 до 10 случайно. Числа в массиве могут повторяться. Теперь надо взять 5 самых старших чисел из этого массива, но таким образом, чтобы они шли по порядку, например 10 9 8 7 6. Если такой комбинации нет, то ничего не делать. Также нужно сделать так, чтобы считало ещё и 4 3 2 1 0. 0 - это число 10 в этом массиве, если оно есть. В общем, если есть числа 4 3 2 1 и 10, то это бы считалось, как 1 2 3 4 10, потому что 10 это якобы число 0, которого нет. Но если есть 10, и нет комбинации чисел 10 9 8 7 6, то оно должно считаться за 0 только для комбинации 0 1 2 3 4. Вот Я не знаю, как сделать такую комбинацию с текущим положением чисел и индексов. Что нужно изменить, чтобы так получилось?
И ещё. Тот же массив, только теперь надо взять просто 5 самых старших чисел не попорядку. Какими бы они не были и сколько бы раз не повторялись. Спасибо.
Решение задачи: «Изменение индекса в массиве»
textual
Листинг программы
using System; namespace Nums2 { class Program { static void Main(string[] args) { int n = 5; int[] A = new int[10]; Random r = new Random(); Console.Write("Начальный массив: "); for (int i = 0; i < A.Length; i++) { A[i] = r.Next(1, 11); Console.Write(A[i] + " "); } Console.WriteLine(); // Нужно скопировать массив, чтобы второй вариант считался правильно int[] B = new int[A.Length]; Array.Copy(A, B, A.Length); // Теперь сортируем массив B, сразу по убыванию Array.Sort(B, (x, y) => y - x); // Выводим 5 элементов Console.Write("\nПять наибольших элементов: "); for (int i = 0; i < 5; i++) Console.Write(B[i] + " "); Console.WriteLine(); // Теперь заполяем ту хитрую таблицу // Справа на лево int[] F = new int[A.Length]; for (int i = A.Length - 2; i >= 0; i--) { // Если правый ээлемент меньше на единицу if (A[i] == A[i + 1] + 1) { // То прибавляем к его длине "правильного" хвоста // единицу F[i] = F[i + 1] + 1; } } // Теперь ищем индекс максимального элемента массива A // у которого F больше 4 int index = -1; for (int i = 0; i < A.Length; i++) { if (index != -1 && A[index] < A[i] && F[i] >= 4) index = 4; } if (index == -1) { Console.WriteLine("\nНет нужной подпоследовательности"); } else { Console.WriteLine("Подпоследовательность:"); for (int i = 0; i < 5; i++) Console.Write(A[i + index] + " "); Console.WriteLine(); } Console.ReadLine(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д