Изменение индекса в массиве - 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();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д