Задать вопрос
shindayoni
@shindayoni
Студент

Как сформировать массив из тех положительных элементов исходного массива, которые расположены в порядке возрастания?

Есть проблема в моем коде:

Код
Console.Write("Введите n: ");
            int n = Convert.ToInt32(Console.ReadLine());

            int[] a = new int[n];

            int[] b = new int[n];

            Console.WriteLine("\nВведите элементы массива: ");
            for (int i = 0; i < n; i++) a[i] = Convert.ToInt32(Console.ReadLine());

            int s = 0;
            for (int i = 0; i < n - 1; i++)
            {
                if (a[i] > 0 && a[i] < a[i + 1] && a[i + 1] > 0)
                {
                    b[s] = a[i];

                    b[s + 1] = a[i + 1];
                    
                    s++;
                }
            }

            Array.Resize(ref b, s + 1);

            Console.WriteLine("\nМассив из положительных элементов, которые расположен в порядке возрастания: ");
            Console.WriteLine(string.Join(" ", b));


На ввод подаю: -1 -2 3 4 -5 -6 9 10
По идее, должен получить: 3 4 9 10

Но на выходе: 3 9 10, четверка куда-то пропадает
  • Вопрос задан
  • 184 просмотра
Подписаться 1 Средний 2 комментария
Решения вопроса 1
@Myclass
странная какая-то формула a[i] > 0 && a[i] < a[i + 1] && a[i + 1] > 0,
для цифры 3 все условия выполняются, но ведь для цифры 4 - нет. Тк. след. после нёё цифра -5 а для неё не выполняется условие а[i + 1] > 0 - те. условие не подходит для ожидаемого результата.

Вот другой вариант. Положительное знаение вставляется всегда во второй массив, но counter для следующего значения увиличивается только тогда, когда условия "слева меньше чем справа" выполняются. Иначе count остаётся на месте и при след. положительном числе элемент массива переписывается новым значением.

ну где-то так:

int s = 0;
            for (int i = 0; i < n; i++)
            {
                if (a[i] > 0)
                {
                    b[s] = a[i];
                  	if ( (s==0) || (s > 0 && b[s-1] < b[s]) )
                    {
                      s++;
                    }
                }
            }


не надо забывать, что последний элемент в массиве b - не есть часть правильного ответа. Элементы b индексом меньше
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы