Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
1 / 0 / 3
Регистрация: 20.07.2010
Сообщений: 124

Замена элементов массива максимальным

03.03.2013, 16:24. Показов 3642. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

У меня есть массив int[] mas = { 1, 2, 3, 4, 0, 0, 1, 2 };

Нужно, заменить элементы массива не равные нулю, максимальным из последовательности элементов, то есть чтобы приведенный массив, стал таким

4, 4, 4, 4, 0, 0, 2, 2
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.03.2013, 16:24
Ответы с готовыми решениями:

Определить количество элементов массива с максимальным значением
Дан одномерный массив целых чисел. Определить количество элементов с максимальным значением. Определить количество элементов с минимальным...

Найти строки с максимальным и минимальным значениями элементов массива
"Задана матрица Х(m,n).Найти строки с максимальным и минимальным значениями элементов массива , и поменять их местами." не могу...

Найти произведение элементов массива, расположенных между максимальным и минимальным
Вариант 1 В одномерном массиве, состоящем из п вещественных элементов, вычислить: 1) сумму отрицательных элементов массива; 2)...

24
Заблокирован
03.03.2013, 17:05
Цитата Сообщение от Master05 Посмотреть сообщение
4, 4, 4, 4, 0, 0, 2, 2
либо формулировка хромает, либо пример неверный.
0
 Аватар для Дмитрий3241
660 / 530 / 137
Регистрация: 07.07.2011
Сообщений: 1,232
Записей в блоге: 6
03.03.2013, 17:11
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Linq;
 
namespace CyberForum
{
    class Program
    {
        static void Main( string[] args )
        {
            int[] mas = { 1, 2, 3, 4, 0, 0, 1, 2 };
            mas = mas.Select( x => x == 0 ? 0 : x = mas.Max() ).ToArray();
            Array.ForEach( mas, x => Console.Write( x + " " ) );
            Console.ReadKey( true );
        }
    }
}
0
1 / 0 / 3
Регистрация: 20.07.2010
Сообщений: 124
03.03.2013, 17:20  [ТС]
Цитата Сообщение от adm_loro Посмотреть сообщение
либо формулировка хромает, либо пример неверный.
Может я не корректно сформулировал, но получить нужно то, что я написал цифрами, то есть элементы массива 1 , 2, 3, 4 заменить на четверки, так как в этой части массива четверка самое большое число, затем оставить два нуля, а два последних элемента массива 1, 2 заменить на 2, 2, так как тут уже двойка имеет максимальное значение

Добавлено через 4 минуты
Цитата Сообщение от Дмитрий3241 Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
using System;
using System.Linq;
 
namespace CyberForum
{
    class Program
    {
        static void Main( string[] args )
        {
            int[] mas = { 1, 2, 3, 4, 0, 0, 1, 2 };
            mas = mas.Select( x => x == 0 ? 0 : x = mas.Max() ).ToArray();
            Array.ForEach( mas, x => Console.Write( x + " " ) );
            Console.ReadKey( true );
        }
    }
}
Это не совсем то, что нужно, в Вас получается

4, 4, 4, 4, 0, 0, 4, 4

А нужно,
4, 4, 4, 4, 0, 0, 2, 2

Вот последние две двойки меня и застопорили
0
03.03.2013, 17:25

Не по теме:

Сразу формулировать нужно правильно, сейчас попробую вам помочь.

0
Заблокирован
03.03.2013, 17:36
Дмитрий3241, а ты что задачи решаешь, не читая условия до конца?

Добавлено через 3 минуты
И да, нормальный препод не примет алгоритмическую задачу решенную с Linq или еще какой <sensored>, ой.. у вас тут не принято материться, кажется.
0
03.03.2013, 17:39

Не по теме:

Цитата Сообщение от adm_loro Посмотреть сообщение
И да, нормальный препод не примет алгоритмическую задачу решенную с Linq или еще какой <sensored>, ой.. у вас тут не принято материться, кажется.
Ну если у вас в подъезде все общаются на матах, то здесь так не принято.

0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.03.2013, 18:12
Как по мне, нужно разбить задачу на две составляющие:
1 - формирования списка максимальных значений последовательностей.
2 - замена максимальным элементов удовлетворяющих условию.

Условие поставлено корректно, просто его сложно понять с ходу. =^_^=

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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
static void Main(string[] args)
        {
            int[][] data = new int[5][];
            data[0] = new int[] { 1, 2, 3, 4, 0, 0, 1, 2 };
            data[1] = new int[]{ -1, -2, -3, -4, 0, 0, -1, -2 };
            data[2] = new int[] { 0, 0, 1, 2, 3, 4, 0, 0, 1, 2 };
            data[3] = new int[] { 1, 2, 3, 4, 0, 0, 1, 2, 0, 0 };
            data[4] = new int[] { 0, 1, 2, 3, 4, 0, 0, 1, 2, 0 };
            for (int i = 0; i < data.Length; i++)
            {
                Print(data[i]);
                int[] max = Max(data[i]);
                Edit(data[i], max);
                Print(data[i]);
                Console.WriteLine("\n");
            }
            Console.ReadKey();
        }
 
        static int[] Max(int[] mas)
        {
            if (mas == null)
                throw new ArgumentException("Параметр не может быть пустым.", "mas");
            List<int> _maxList = new List<int>();
            int _max = mas[0];
            bool _flag = false;
            for (int i = 0; i < mas.Length; i++)
            {
                if (mas[i] == 0)
                {
                    if (_flag)
                    {
                        _maxList.Add(_max);
                        _flag = false;
                    }
                }
                else
                {
                    if (_flag == false)
                    {
                        _max = mas[i];
                    }
                    else if (mas[i] > _max)
                    {
                        _max = mas[i];
                    }
                    _flag = true;
                }
            }
            if (_flag)
            {
                _maxList.Add(_max);
            }
            return _maxList.ToArray();
        }
 
        static void Edit(int[] mas, int[] max)
        {
            if (mas == null)
                throw new ArgumentException("Параметр не может быть пустым.", "mas");
            int _index = 0;
            bool _flag = false;
            for (int i = 0; i < mas.Length; i++)
            {
                if (mas[i] != 0)
                {
                    mas[i] = max[_index];
                    _flag = true;
                }
                else
                {
                    if (_flag)
                    {
                        _index++;
                        if (_index > max.Length)
                        {
                            throw new Exception("Неверный размер массива максимальных элементов");
                        }
                        _flag = false;
                    }
                }
            }
        }
 
        static void Print(int[] mas)
        {
            if (mas == null)
                throw new ArgumentException("Параметр не может быть пустым.", "mas");
            Console.WriteLine();
            for (int i = 0; i < mas.Length; i++)
            {
                Console.Write(mas[i]);
                Console.Write("; ");
            }
        }
1
Заблокирован
03.03.2013, 19:19
вот решение:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 private static void wtf(int[] a)
        {
            int max = int.MinValue; 
            var x = new List<int>(a) {0}; //как правило, в таких задачах массив читают из файла или с консоли
            //и мы можем заранее позаботиться о длине массива, т.е. сделать его на 1 элемент больше чем дано и не создавать копию   
            for(int i = 0; i < x.Count; ++i)
            {
                if(x[i] == 0)
                {
                    for (int j = i - 1; j >= 0 && x[j] != 0; --j)
                    {
                        x[j] = max;
                    }
                    max = int.MinValue;
                    continue;
                }
                if (max < x[i])
                    max = x[i];
            }
            string str = string.Join(" ", x.Take(a.Length));
            Console.WriteLine(str);
        }
2
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.03.2013, 19:43
Цитата Сообщение от adm_loro Посмотреть сообщение
вот решение:
Если входной массив не заканчивается нулём, последнюю последовательность не изменит.
0
Заблокирован
03.03.2013, 19:45
Wolfdp, читай код внимательно.

Добавлено через 58 секунд
или тупо комментарий прочитай, если не въезжаешь.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.03.2013, 20:01
C#
1
var x = new List<int>(a) { 0 };
Вот это?! Согласен, так работать будет. Вот только за такое печеньки отбирают (две пачки так лишился). А если у тебя будет массив на миллиард элементов, ты тоже будешь создавать его копию+1???
0
Заблокирован
03.03.2013, 20:11
<sensored> прочитай комментарий ты <sensored> честное слово.

Добавлено через 2 минуты
Wolfdp,
ответь на вопрос откуда ты будешь брать массив?

Добавлено через 1 минуту
из файла, а я создам один миллиард + 1 элементов въезжать начал? или тебе еще пояснить.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.03.2013, 20:13
Цитата Сообщение от adm_loro Посмотреть сообщение
ответь на вопрос откуда ты будешь брать массив?
То есть нам при загрузке массива нужно уже его корректировать? Окей, а как потом повторно использовать с измененными данными? Повсюду ставить (mas.Lenght - 1)? Или создавать новый?
0
Заблокирован
03.03.2013, 20:19
ты в курсе что такое алгоритмическая задача?

Добавлено через 2 минуты
сигнальный элемент - это специально чтобы показать суть алгоритма. Мне ничего не мешает добавить еще одно условие и забить болт на этот ноль, но это не красиво с точки зрения алгоритма.

Добавлено через 1 минуту
Wolfdp, ты вообще когда нибудь решал олимпиадные задачи?

Добавлено через 1 минуту
так вот эта на школьных олимпиадах, довольно часто встречается.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.03.2013, 20:20
Цитата Сообщение от adm_loro Посмотреть сообщение
Мне ничего не мешает добавить еще одно условие и забить болт на этот ноль, но это не красиво с точки зрения алгоритма.
То есть создавать новый массив - это красиво? ) Короче код - да. Красиво? Не уверен... Как ни как, тут не внешний вид оценивается. Но, думаю, если человек учится на программиста, то ему нужно с самого начала объяснить, что память не резиновая, и так лучше не делать.
0
Заблокирован
03.03.2013, 20:21
да небуду я создавать массив.
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.03.2013, 20:21
Цитата Сообщение от adm_loro Посмотреть сообщение
ты вообще когда нибудь решал олимпиадные задачи?
По математике и физике пару раз. И если на олимпиадах оценивают код по его краткости - ну его на хутор.
0
Заблокирован
03.03.2013, 20:25
ты хоть что-нибудь понял что я написал в комментариях в самом коде?

Добавлено через 1 минуту
//как правило, в таких задачах массив читают из файла или с консоли
//и мы можем заранее позаботиться о длине массива, т.е. сделать его на 1 элемент больше чем дано и не создавать копию

Добавлено через 2 минуты
Намек тебе: Это я писал?
Цитата Сообщение от Wolfdp Посмотреть сообщение
int[][] data = new int[5][];
* * * * * * data[0] = new int[] { 1, 2, 3, 4, 0, 0, 1, 2 };
* * * * * * data[1] = new int[]{ -1, -2, -3, -4, 0, 0, -1, -2 };
* * * * * * data[2] = new int[] { 0, 0, 1, 2, 3, 4, 0, 0, 1, 2 };
* * * * * * data[3] = new int[] { 1, 2, 3, 4, 0, 0, 1, 2, 0, 0 };
* * * * * * data[4] = new int[] { 0, 1, 2, 3, 4, 0, 0, 1, 2, 0 };
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.03.2013, 20:27
Цитата Сообщение от adm_loro Посмотреть сообщение
ты хоть что-нибудь понял что я написал в комментариях в самом коде?
да. на входе создается копия массива и дописывается ноль в конце. В комментарии ты сказал, что мы судя по всему будем записывать при формировании массива тоже последовательно (добавляя по элементу на каждом шаге) и позаботимся о записи "лишнего нуля" на этом этапе.

Что мне не понравилось? Это очень ограничивает такое решение в повторном использовании кода.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2013, 20:27
Помогаю со студенческими работами здесь

Вывести на экран номер всех элементов массива, не совпадающих с максимальным
Вывести на экран номер всех элементов,не совпадающих с максимальным!

Вывести на экран номера всех элементов массива, не совпадающих с максимальным
Всем доброго времени суток! Буду очень благодарен если поможете составить программы Задачи из данного пункта решить, используя одномерный...

Вывести на экран номера всех элементов массива, не совпадающих с максимальным
Задачи из данного пункта решить, используя одномерный массив. Дана последовательность из n действительных чисел. Вывести на экран...

Произведение элементов массива стоящих между максимальным и минимальным по модулю
Суть такова: В массиве вычислить: 1 сумму положительных элементов. СДЕЛАЛ 2 Произведение элементов стоящих между максимальнм по...

Произведение элементов массива, расположенных между максимальным и минимальным элементами
Добрый день! Вроде бы правильно написал, но упорно выводит 1. Что не так, подскажите? int sum = 0; int min= 0; ...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru