Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
30 / 29 / 15
Регистрация: 28.09.2011
Сообщений: 449

Найти произведение элементов массива расположенных между первым и вторым нулевыми элементами

02.03.2013, 18:55. Показов 4014. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
нужно найти произведение элементов массива расположенных между первым и вторым нулевыми элементами
C#
1
2
3
4
5
            for (int I = 0; I < n; I++)           
           { if (Arr[I] == 0) { Console.WriteLine("первый нулевой элемент = " + (I + 1)); per = I+1;  break; } }
            for (int I = per; I < n; I++)
            { if (Arr[I] == 0) { Console.WriteLine("второй нулевой элемент = " + (I + 1)); I = vtor;  break; } }
            for (int I = per; I < vtor; I++) { proiz = proiz*Arr[I]; }
в результате всегда 1, так как я сначала присвоил proiz=1, то есть ничего не меняется. где ошибка?
хотя, позиции первого и второго нулевых выводит правильно!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2013, 18:55
Ответы с готовыми решениями:

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

Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами
Добрый день!помогите пожалуйста с массивами, а то их плохо понимаю. I.в одномерном массиве, состоящем из N целочисленных элементов,...

Найти произведение элементов массива, расположенных между первым и вторым нулевыми элементами
произведение элементов массива, расположенных между первым и вторым нулевыми элементами

11
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
02.03.2013, 19:09
C#
1
Console.WriteLine("второй нулевой элемент = " + (I + 1)); I = vtor;
Вот тут вы перепутали I и vtor;
У vtor - пожизненный 0.
1
Заблокирован
02.03.2013, 21:07
gylayko, ну опять же это однопроходной алгоритм, т.е. достаточно одного цикла.

Добавлено через 2 минуты
наткнулся на 0 считаем произведение, наткнулся второй - вышли из цикла. Написали ответ - ВСЁ.
0
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
02.03.2013, 21:09
C#
1
var mult = array.SkipWhile(x => x != 0).Skip(1).TakeWhile(z => z != 0).Aggregate((x, p) => x * p);
на заметку
0
Заблокирован
02.03.2013, 21:22
andrew_w2k, хреновая заметка, это задача не на то как ты круто знаешь Linq, а на способность написать быстрый и понятный алгоритм.
1. SkipWhile(x => x != 0) создали первую обертку над массивом
2. Skip(1) 2- ю
3. TakeWhile(z => z != 0) - 3- ю
4. Aggregate((x, p) => x * p) - начинаем перебирать
и того 3 никому ненужных враппера и три делегата.

Добавлено через 2 минуты
Цитата Сообщение от andrew_w2k Посмотреть сообщение
SkipWhile(x => x != 0).Skip(1).TakeWhile(z => z != 0)
когда появилось Linq я думал, что оптимизатор справляется с такими выражениями, но увы.
0
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
02.03.2013, 21:42
а по-моему эта задача была на то, как я круто знаю linq
C#
1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 0; i < array.Length; i++)
            {
                if(array[i] == 0) 
                {
                    i++;
                    while(array[i] != 0)
                    {
                        mult = mult * array[i];
                        i++;
                    }
                }
            }
0
Заблокирован
02.03.2013, 21:44
andrew_w2k,
Цитата Сообщение от andrew_w2k Посмотреть сообщение
while(array[i] != 0)
* * * * * * * * * * {
* * * * * * * * * * * * mult = mult * array[i];
* * * * * * * * * * * * i++;
* * * * * * * * * * }
зачем?
1
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
02.03.2013, 21:46
оп да... тупо линк переписал.
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
02.03.2013, 22:04
Именно тупо. Вот не будет второго нулевого элемента в вашем массиве и пользователь программы этого не поймет...
0
 Аватар для andrew_w2k
341 / 341 / 90
Регистрация: 04.03.2010
Сообщений: 648
02.03.2013, 22:23
критики такие критики...
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int mult = 1; bool c = false;
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] != 0)
                {
                    if (c)
                        mult *= array[i];
                }
                else
                {
                    c = !c; 
                }
            }
Добавлено через 2 минуты
только счетчик ещё поставить на вхождение нулевых и соответственно break после второго

Добавлено через 6 минут
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
int mult = 1; int countZero = 0;
            for (int i = 0; i < array.Length; i++)
            {
                if (array[i] != 0)
                {
                     if (countZero == 1)
                        mult *= array[i];
                }
                else
                {
                    countZero++;
                }
            }
0
Заблокирован
03.03.2013, 03:10
kontuPauk, дружище, если ты не в курсе про такие задачи, то не стоит бросаться словами. Задачи на составление алгоритма всегда имеют корректные входные данные.

Добавлено через 1 минуту
вот мой вариант без дополнительных флагов.
C#
1
2
3
4
5
6
7
   private static long Op(int[] x)
        {
            long m = 0;
            for (int i = 1; m == 0 || x[i] != 0; ++i)
                if (x[i] != 0) { if (m == 0 && x[i-1] == 0) ++m; m *= x[i]; }
            return m;
        }
Добавлено через 4 минуты
andrew_w2k, нее все ок. К тебе претензий вообще нет, ты дал правильные ответы, а то что задачу можно решать 100500 различными способами, так это прикольно. Просто с Linq меня временами бесит(особенно на работе), трудно сходу оценить сложность решения.
0
311 / 309 / 125
Регистрация: 29.01.2013
Сообщений: 638
Записей в блоге: 1
03.03.2013, 10:40
Да сказано было без претензий и не о личностях. Просто таки меня по-другому учили. Был преподаватель, который любил поменять входные данные. Да и пятнадцать лет практики заставляли. Ладно, без претензий.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.03.2013, 10:40
Помогаю со студенческими работами здесь

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

Вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами
Помогите решить задачу на с#, произведение элементов массива, расположенных между первым и вторым нулевыми элементами.

Вычислить произведение элементов массива, расположенных между первым и вторым нулевыми элементами
Задача: В одномерном массиве,состоящем из n целочисленных элементов вычислить произведение элементов массива, расположенных между первым и...

Массив: произведение элементов массива, расположенных между первым и вторым нулевыми элементами
всем привет! помогите пожалуйста! не могу сделать :( в одномерном массиве, состоящем из n целых элементов, вычислить: 1) номер...

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


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
влияние грибов на сукцессию
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 , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru