0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 25
1

Удалить все элементы, стоящие между минимальным положительным и максимальным отрицательным элементами

12.11.2018, 10:52. Показов 5602. Ответов 10

В массиве A=(a1, а2, ..., аn) удалить все элементы, стоящие между минимальным положительным и максимальным отрицательным элементами.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.11.2018, 10:52
Ответы с готовыми решениями:

В двухмерном массиве удалить все элементы, стоящие между минимальным положительным и максимальным отрицательным
В двухмерном массиве 10x10 удалить все элементы, стоящие между минимальным положительным и...

Отсортировать элементы массива, расположенные между первым положительным и последним отрицательным элементами
В консольном приложении нужно реализовать указанную задачу, используя одномерный массив 10 целых...

Все положительные элементы, стоящие перед минимальным положительным элементом, переслать в «хвост» массива
В массиве A=(a1, а2, ..., аn) все положительные элементы, стоящие перед минимальным положительным...

Отсортируйте элементы массива, расположенные между первым положительным и последним отрицательным элементами массива.
В консольном приложении реализуйте указанную задачу, используя одномерный массив 10 целых чисел....

10
914 / 496 / 200
Регистрация: 08.10.2018
Сообщений: 1,528
Записей в блоге: 11
12.11.2018, 11:39 2
Лучший ответ Сообщение было отмечено Кирилл4316 как решение

Решение

Кирилл4316, получите:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
var N = 10;
var A = new int[N];
// заполняем случайными значениями
var rand = new Random(DateTime.Now.Second);
for (var i = 0; i < N; i++)
    A[i] = rand.Next(-99, 100);
Console.WriteLine("Исходный массив: " + string.Join(", " , A));
var min = int.MaxValue;
var imin = 0;
var max = int.MinValue;
var imax = 0;
for (var i = 0; i < N; i++)
{
    // ищем минимальный среди положительных
    if (A[i] >= 0 && A[i] < min) 
    { 
        min = A[i];
        imin = i;
    }
    // ищем максимальный среди отрицательных
    if (A[i] < 0 && A[i] > max)
    {
        max = A[i];
        imax = i;
    }
}
Console.WriteLine("min A[{0}] = {1}, max A[{2}] = {3}", imin, min, imax, max);
var first = Math.Min(imin, imax);
var last = Math.Max(imin, imax);
var list = new List<int>();
for (var i = 0; i < N; i++)
{
    if (i > first && i < last) continue;
    list.Add(A[i]);
}
A = list.ToArray();
Console.WriteLine("Результирующий массив: " + string.Join(", ", A));
1
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 25
12.11.2018, 13:59  [ТС] 3
Я понял что этот кусок кода удаляет элементы, можно по подробнее что и как работает

C#
1
2
3
4
5
var list = new List<int>();
for (var i = 0; i < N; i++)
{
    if (i > first && i < last) continue;
    list.Add(A[i]);
0
914 / 496 / 200
Регистрация: 08.10.2018
Сообщений: 1,528
Записей в блоге: 11
12.11.2018, 18:03 4
Кирилл4316, объясняю:
1. Так как массив - штука постоянная, то удалить оттуда элементы можно только переопределением самого массива,
поэтому сначала мы заводим себе список list тип List<int>(), в который можно добавлять подходящие элементы.
2. Дальше, мы нашли нижний (first) и верхний (last) индексы, между которыми значения нам не нужны.
3. В цикле мы обходим все элементы массива и, если индекс i больше нижнего индекса и меньше верхнего индекса,
то мы берём следующую итерацию цикла (со строки 4 переходим к строке 2). Если индекс i в то условие не попадает,
то выполняется строка 5.
0
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 25
12.11.2018, 18:13  [ТС] 5
Спасибо разобрался. Еще вопрос, еще нужно сделать все тоже самое только с двухмерным массивом, как это реализовать
0
914 / 496 / 200
Регистрация: 08.10.2018
Сообщений: 1,528
Записей в блоге: 11
12.11.2018, 18:38 6
Кирилл4316
Для двумерного массива я не могу представить как будет работать этот алгоритм.
Вот когда Вы мне объясните как удалить элемент матрицы, не разрушив её структуры, тогда можно что-нибудь придумать...

А что скажут мэтры программирования?
0
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 25
12.11.2018, 18:42  [ТС] 7
Ну на форуме подсказали развернуть матрицу в одномерный массив удалить элементы и свернуть обратно в двухмерный
0
914 / 496 / 200
Регистрация: 08.10.2018
Сообщений: 1,528
Записей в блоге: 11
12.11.2018, 18:53 8
Ну тогда у нас останется "хвост" из неиспользованных ячеек матрицы, которые нулями что-ли заполнить?
0
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 25
12.11.2018, 18:55  [ТС] 9
А просто пустыми оставить можно? Если нельзя то, тогда заполнить нулями скорее всего
0
914 / 496 / 200
Регистрация: 08.10.2018
Сообщений: 1,528
Записей в блоге: 11
12.11.2018, 19:25 10
Цитата Сообщение от Кирилл4316 Посмотреть сообщение
пустыми оставить можно?
Если это целочисленный двумерный массив, то заполнение только нулями (хотя можно представить элементы типом <int?>)
А если это массив действительных чисел, то можно пустые ячейки обозначать как double.NaN
0
0 / 0 / 0
Регистрация: 12.11.2018
Сообщений: 25
12.11.2018, 19:37  [ТС] 11
Вот что получается пока что, не подскажете как теперь как заполнить нулями и свернуть обратно?
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
            int[,] array = new int[5,5];
            int[] m1 = new int[25];
            int z = 0;
            Random rand = new Random();
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    array[i, j] = rand.Next(-99, 100);
                }
            }
            Console.WriteLine("Исходный массив: ");
            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                    Console.Write(String.Format("{0,4}", array[i, j]));
                Console.WriteLine();
            }
            for (int i = 0; i < 5; i++)
                for (int j = 0; j < 5; j++)
                {
                    m1[z] = array[i, j];
                    z++;
                }
            Console.WriteLine("Развернутый массив: ");
            foreach (int t in m1)
            {
                Console.Write(t + " ");
            }
            int min = 100;
            int max = -99;
            int imin = 0;
            int imax = 0;
            for (int i = 0; i < array.Length; i++)
            {
                if (m1[i] >= 0 && m1[i] < min)
                {
                    min = m1[i];
                    imin = i;
                }
                if (m1[i] < 0 && m1[i] > max)
                {
                    max = m1[i];
                    imax = i;
                }
            }
            Console.WriteLine();
            Console.WriteLine("Минимальный положительный элемент: {0}", min);
            Console.WriteLine("Масимальный отрицательный элемент: {0}", max);
            int first = Math.Min(imin, imax);
            int last = Math.Max(imin, imax);
            var list = new List<int>();
            for (int i = 0; i <m1.Length; i++)
            {
                if (i > first && i < last) continue;
                list.Add(m1[i]);
            }
            m1 = list.ToArray();
            Console.Write("Массив после удаления элементов: ");
            foreach (int t in m1)
            {
                Console.Write(t + " ");
            }
 
 
            Console.ReadKey();
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.11.2018, 19:37
Помогаю со студенческими работами здесь

Отсортируйте элементы массива, расположенные между первым положительным и последним отрицательным элементами массива.
В консольном приложении реализуйте указанную задачу, используя одномерный массив 10 целых чисел....

Обнулить элементы массива, расположенные между его минимальным и максимальным элементами
Дан массив размера N. Обнулить элементы массива, расположенные между его минимальным и максимальным...

Массив: Обнулить элементы массива, расположенные между его минимальным и максимальным элементами...
Дан массив размера N. Обнулить элементы массива, расположенные между его минимальным и максимальным...

Элементы находящиеся между максимальным и минимальным элементами массива занести в другой массив
Ввести одномерный массив с клавиатуры и элементы находящиеся между максимальным и минимальным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru