.NET 2.x Найти наибольшую длину цепочки стоящих рядом знакочередующихся элементов и количество отрицательных - C#
Формулировка задачи:
В заданном массиве вещественных чисел найти наибольшую
длину цепочки стоящих рядом знакочередующихся элементов и коли-
чество отрицательных.
Решение задачи: «.NET 2.x Найти наибольшую длину цепочки стоящих рядом знакочередующихся элементов и количество отрицательных»
textual
Листинг программы
using System; using System.Collections.Generic; namespace Task1 { class Program { static void Main(string[] args) { float[] elements = { 0.1f, 0.3f, 9f, -45f, 5f, //------------------------------ Цепочка 1 (1 пара) 7f, 0f, 3f, 6f, 7f, 7f, 8f, -89f, -76f, -12f, 67f, //----------------------------- Цепочка 2 (1 пара) 87f, 65f, -34f, 5f, -6f, 7f, -31f, 54f, //---------- Цепочка 3 (3 пары подряд) 12.45f, 67f, 5f, -24f, 4f, -2f, 3f, -3f, 4f, -5f, 3f, //--- Цепочка 4 (4 пары подряд) 2f, 3f, 4f, -5f, 56f, -65f, 12f // ------------------- Цепочка 5 (2 пары подряд) }; //Исходим из предположения, что цепочка всегда начинается с //отрицательного числа и заканчивается положительным, если //после этого положительного числа нет отрицательного, //то цепочка обрывается. int quantityOfNegativeElements; FloatNumChain[] chains = GetChains(elements, out quantityOfNegativeElements); FloatNumChain greatest = null; int greatestLengthOfChain = 0; for (int i = 0; i < chains.Length; i++) { FloatNumChain chain = chains[i]; if (chain.Chain.Length > greatestLengthOfChain) { greatest = chain; greatestLengthOfChain = greatest.Chain.Length; } } Console.WriteLine("Кол-во отрицательных элементов в массиве - " + quantityOfNegativeElements); if (greatest != null) { Console.WriteLine("Кол-во элементов самой длинной цепочки - " + greatest.Chain.Length); Console.WriteLine("Элементы первой самой длинной цепочки:"); Array.ForEach(greatest.Chain, value => Console.Write("{0}; ", value)); } Console.ReadKey(); } static FloatNumChain[] GetChains(float[] elements, out int quantityOfNegativeElements) { quantityOfNegativeElements = 0; var chains = new List<FloatNumChain>(); float prevValue = 0f; var currentChain = new List<float>(elements.Length); for (int i = 0; i < elements.Length; i++) { float element = elements[i]; bool elementIsNegative = element < 0f; if (elementIsNegative) { quantityOfNegativeElements++; } bool prevElementIsNegative = prevValue < 0f; bool continueToBuildChain = (elementIsNegative && !prevElementIsNegative) || (!elementIsNegative && prevElementIsNegative); if (continueToBuildChain) //Если продолжать строить цепочку { currentChain.Add(element); } else if (elementIsNegative) { if (currentChain.Count > 0) { currentChain.Clear(); } currentChain.Add(element); } else { if (currentChain.Count == 0) { continue; } if (currentChain.Count % 2 != 0) { currentChain.Clear(); continue; } chains.Add(new FloatNumChain(currentChain.ToArray())); currentChain.Clear(); } prevValue = element; } if (currentChain.Count > 0 && currentChain.Count % 2 == 0) { chains.Add(new FloatNumChain(currentChain.ToArray())); } return chains.ToArray(); } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д