Изменение индекса в массиве - 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();
}
}
}