Одномерные массивы, сортировка - C#
Формулировка задачи:
Из последовательности целых чисел вывести в порядке возрастания все числа, стоящие на чётных местах и встречающиеся более двух раз.
Я попытался определить элементы встречающиеся в последовательности более двух раз. Но где-то есть ошибка, так как программа выводит только число 22, хотя есть и число 5, встречающееся более двух раз.
В то же время записываю в masLenght количество, встречающихся элементов в последовательности более двух раз и элементы стоящие в четных местах. Это для того чтобы создать новый массив с определенным количеством элементов masLenght , и добавить туда эти элементы после чего их отсортировать. Но на сколько я понимаю это очень затяжной и наитупейший подход к решению задачи. Подскажите пожалуйста как все-таки решить задачку, только без применения ArrayList. Ну а если иначе никак, то и с ним можно.
Console.Write("Данный массив: "); int[] mas = { 22, 5, 9, 0, 22, -6, 5, 3, 22, 8,-34, 11, 5 }; int count = 1, masLenght = 0; for (int i = 0; i < mas.Length; i++) Console.Write(mas[i] + " "); Console.WriteLine(); for( int h = 0; h < mas.Length; h++) { for (int f = h+1; f < mas.Length; f++) { if (mas[h] == mas[f]) { count++; } } if(count > 2) { Console.WriteLine("Встречается более двух раз: "+ mas[h]); masLenght++; } count = 1; if(h++ % 2 == 0) { // Console.WriteLine("Элемент стоит на четном месте: " + mas[h]); masLenght++; } } Console.WriteLine("Кол во элементов: " + masLenght);
Решение задачи: «Одномерные массивы, сортировка»
textual
Листинг программы
static void Add(ref int[] n2, int a) { if (Array.IndexOf(n2, a) >= 0) return; Array.Resize(ref n2, n2.Length + 1); n2[n2.Length - 1] = a; } static void Main(string[] args) { int[] mas = { 22, 5, 9, 0, 22, -6, 5, 3, 22, 8, -34, 11, 5 }; int[] was = new int[mas.Length]; int[] n2 = new int[0]; Console.WriteLine("Данный массив:"); for (int i = 0; i < mas.Length; i++) { Console.Write(mas[i] + " "); was[i] = 0; } Console.WriteLine(); for (int i = 0; i < mas.Length - 2; i++) if (was[i] == 0) { if (i % 2 == 1) Add(ref n2, mas[i]); int n = 0; for (int j = i; j < mas.Length; j++) if (mas[i] == mas[j]) { n++; was[j] = 1; } if (n > 2) Add(ref n2, mas[i]); } Array.Sort(n2); foreach (int i in n2) Console.Write(i + " "); Console.WriteLine(); Console.ReadKey(true); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д