Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
2 / 2 / 0
Регистрация: 12.12.2013
Сообщений: 83

Алгоритм, который находит и выводит среднее арифметическое всех элементов массива, имеющих нечётное значение

06.05.2014, 15:18. Показов 5111. Ответов 38
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из языков программирования алгоритм, который находит и выводит среднее арифметическое всех элементов массива, имеющих нечётное значение.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.05.2014, 15:18
Ответы с готовыми решениями:

Посчитать среднее арифметическое значение всех отрицательное элементов массива
Разработать алгоритм который дозволяэ в одномерном масивидийсних числе длиной N посчитать среднее арифметическое значение всех...

Массивы. Среднее арифметическое всех элементов массива, имеющих нечётное значение
Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Опишите на русском языке или на одном из...

Найти среднее арифметическое всех элементов массива, имеющих нечётное значение
2) Дан целочисленный массив из 30 элементов. Элементы массива могут принимать значения от 0 до 1000. Найдите и выводите среднее...

38
05.01.2015, 17:21
Студворк — интернет-сервис помощи студентам

Не по теме:

Average() это конечно сильно.

0
Модератор
Эксперт JS
 Аватар для Eva Rosalene
5241 / 2115 / 416
Регистрация: 06.01.2013
Сообщений: 4,846
05.01.2015, 17:31
Ну если генерировать массив колбэком, то, например, так:
Ruby
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#coding: utf-8
 
sum = 0
count = 0
rnd = Random.new
 
Array.new(30) {
  rnd.rand(50)
}.reject { |item|
  item.even?
}.each { |item|
  sum += item
  count += 1
}
 
print "Среднее = #{sum.to_f / count}\n"
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
06.01.2015, 00:32
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
#include <iostream>
#include <random>
 
int main()
{
    const int N = 30;
    int A[N], numberOfOddVars = 0, sumOfOddVars = 0;
    std::mt19937 gen { std::random_device()() };
    std::uniform_int_distribution<> dist(0, 1000);
 
    for (auto &x : A)
    {
        x = dist(gen);
        std::cout << x << " ";
        const bool isOdd = x & 1;
        if (isOdd)
        {
            sumOfOddVars += x;
            numberOfOddVars++;
        }
    }
    std::cout << "\n";
 
    if (numberOfOddVars != 0)
        std::cout << "Average of odd vars: " << static_cast<double>(sumOfOddVars) / numberOfOddVars;
    else
        std::cout << "No odd vars";
}
Добавлено через 2 минуты
Цитата Сообщение от ildwine Посмотреть сообщение
C++
1
2
// заполнение массива сличайными числами от 0 до 1000
for (int i = 0; i < 30; i++) array[i] = rand() % 1000 + 1;
Приоритет % выше приоритета сложения. Будет считать сначала СЧ от 0 до 999, а потом добавлять 1. Получается от 1 до 1000.

Добавлено через 2 минуты
Цитата Сообщение от Новичок Посмотреть сообщение
Не то что код _Ivana.
Не всем можно такой сахар, у некоторых диабет)

Мне нравится. Коротко и по делу. Меньше букв - меньше ошибок.
1
 Аватар для Новичок
1682 / 1098 / 489
Регистрация: 17.07.2012
Сообщений: 5,360
06.01.2015, 00:58
Цитата Сообщение от MrGluck Посмотреть сообщение
Меньше букв - меньше ошибок.
Всегда?!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
06.01.2015, 01:38
FraidZZ, можно еще так, например
Ruby
1
2
arr = (0..1000).to_a.shuffle.take(30).select{|x| x.odd?}
puts arr.inject(:+).to_f / arr.size
На лиспе можно так (наверняка есть лучше, давно не использовал данный ЯП)
Lisp
1
2
(setf arr (loop for n from 0 to 29 collect (random 1001)))
(format t "~,5f" (/ (apply #'+ (remove-if #'evenp arr)) (count-if #'oddp arr)))
2
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
06.01.2015, 01:54
MrGluck, честно говоря, ожидал от вас пары строчек с мультисет-контейнерами, мапированием и еще чем-нибудь эдаким, как вы умеете Очень нужен пример программы в Си++
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
06.01.2015, 17:35
_Ivana, нечто заумное, но бесполезное?) Такое не сойдет?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main(int argc, char *argv[])
{
    const int N = 30;
    int A[N];
    std::mt19937 gen { std::random_device()() };
    std::uniform_int_distribution<> dist(0, 1000);
 
    std::generate(std::begin(A), std::end(A), [&]{ return dist(gen); });
 
    std::copy(std::begin(A), std::end(A), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    std::cout << std::endl << 
        std::accumulate(std::begin(A), std::end(A), 0., [](int res, int x){return x % 2 ? x + res : res;}) /
        std::count_if(std::begin(A), std::end(A), [](int x) { return x % 2; })
     << std::endl;
}
если заюзать константу "по полной", можно чуть укоротить
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
#include <iterator>
 
int main(int argc, char *argv[])
{
    const int N = 30;
    int A[N];
    std::mt19937 gen { std::random_device()() };
    std::uniform_int_distribution<> dist(0, 1000);
 
    std::generate(A, A + N, [&]{ return dist(gen); });
 
    std::copy(A, A + N, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
 
    std::cout << std::endl << 
        std::accumulate(A, A + N, 0., [](int res, int x){return x % 2 ? x + res : res;}) /
        std::count_if(A, A + N, [](int x) { return x % 2; })
     << std::endl;
}
1
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
06.01.2015, 17:36
KOPOJI, во-во, что-то наподобие У нас же тут конкурс на самое интересное решение простейшей задачи!
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,973
06.01.2015, 18:22
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <algorithm>
#include <numeric>
 
bool isOdd(int n) {
    return n & 1;
}
 
int addIfOdd(int a, int b) {
    return a + ( ( isOdd(b) ) ? b : 0 );
}
 
int main() {
    const int COUNT = 5;
    int array[COUNT] = { 1, 2, 3, 4, 5 };
    
    std::cout << "Odd elements mean: " << ( std::accumulate(array, array + COUNT, 0, addIfOdd) / (double)std::count_if(array, array + COUNT, isOdd) ) << std::endl;
    
    return 0;
}
1
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
07.01.2015, 13:41
Цитата Сообщение от Ashmotev Посмотреть сообщение
Можно на VB.NET
VB.NET
1
2
3
4
5
6
7
Module All
  Public Sub Main()
    Dim Rand As New Random()
    Console.WriteLine(Enumerable.Range(0, 30).Select(Function(I) Rand.Next(1001)).Where(Function(X) X And 1).Average())
    Console.ReadKey()
  End Sub
End Module
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.01.2015, 14:25
_Ivana, я вначале так и сделал, но потом понял что любое решение, требующее более одного цикла - убого и будет строиться лишь на понтах. В итоге 2 из 3 вариантов потёр и оставил лишь самый простой.

У меня правда для счётчика использовался "захват" переменной извне. Но такой вариант требует if-else, а хотелось бы хотя бы на тернарке

Добавлено через 2 минуты
Мне кстати вариант easybudda с побитовым и больше нравится) Я его и использовал, правда вот так:
C++
1
a + (b & 1) * b;
Добавлено через 1 минуту
KOPOJI, хедеры кстати потёр. Нужен numeric и random.

Добавлено через 2 минуты
Да, ещё смутило потенциальное деление на ноль.
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6724 / 880
Регистрация: 12.06.2012
Сообщений: 19,967
12.01.2015, 14:43
Цитата Сообщение от MrGluck Посмотреть сообщение
хедеры кстати потёр. Нужен numeric и random.
У меня не нужны gcc 4.8.1, ubuntu


Цитата Сообщение от MrGluck Посмотреть сообщение
Да, ещё смутило потенциальное деление на ноль.
эмм.. Это где? Там же не % x, а % 2 везде.. А, да, понял, count_if..
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
12.01.2015, 14:55
Цитата Сообщение от KOPOJI Посмотреть сообщение
У меня не нужны gcc 4.8.1, ubuntu
Тем не менее, ничто не гарантирует что в другой версии компилятора (разумеется с поддержкой фич С++11) данный код заработает. accumulate определена в numeric, ГСЧ и распределения в random.

Добавлено через 1 минуту

Не по теме:

И всё-таки коподжи :D

0
12.01.2015, 14:59

Не по теме:

а нефиг запускать код в другой версии компилятора :D

0
835 / 643 / 101
Регистрация: 20.08.2013
Сообщений: 2,524
12.01.2015, 18:19
MrGluck, у меня тоже с битами, и тоже без проверки на 0 элементов...
0
4949 / 2289 / 287
Регистрация: 01.03.2013
Сообщений: 5,991
Записей в блоге: 32
13.01.2015, 01:04
Цитата Сообщение от MrGluck Посмотреть сообщение
_Ivana, я вначале так и сделал, но потом понял что любое решение, требующее более одного цикла - убого и будет строиться лишь на понтах. В итоге 2 из 3 вариантов потёр и оставил лишь самый простой.
Ну а что еще кроме понтов в такой теме может быть интересного? У меня в половине моих однострочников массив по 3 раза пробегается - фильтрация нечетных а потом сумма и количество элементов, хотя конечно могу и за один пробег сахаром написать. Хотел через моноид извратиться, но операция суммирования нечетных не моноидальна, хотя я знаю как протащить эту формально не удовлетворяющую условиям операцию через моноид.
0
Администратор
Эксперт .NET
 Аватар для tezaurismosis
9673 / 4825 / 763
Регистрация: 17.04.2012
Сообщений: 9,664
Записей в блоге: 14
14.01.2015, 17:38
На Python вроде бы не было...
Python
1
2
3
4
5
from random import randint
 
arr = [randint(0, 1000) for x in range(30)]
avg = sum([x for x in arr if x % 2 != 0]) / 30.0
print(avg)
0
431 / 385 / 200
Регистрация: 12.08.2011
Сообщений: 1,610
15.01.2015, 08:31
Совершенно необязательно создавать списки, можно использовать генераторы.

Python
from random import randint
n = 30
print(sum(x for x in (randint(0, 1000) for _ in xrange(n)) if x % 2 == 0) / float(n))
0
Форумчанин
Эксперт CЭксперт С++
 Аватар для MrGluck
8216 / 5047 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
15.01.2015, 14:00
tezaurismosis, Vtulhu, надо посчитать среднее арифмитическое элементов, имеющих нечётное значение, а не отношение их суммы к общему количеству элементов. В знаменателе тоже нужно отсев делать.
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
15.01.2015, 14:00
Помогаю со студенческими работами здесь

Найдите среднее арифметическое элементов матрицы, имеющих нечётное значение
Тема: Двумерные числовые массивы. Указание: Заполните двумерный числовой массив B(9,9) случайными целыми числами в интервале . Выведите...

Подсчитать среднее арифметическое элементов массива. имеющее нечётное значение
Дан массив из 30 элементов.Элементы принимают значения от 0 до 1000.Как подсчитать среднее арифметическое элементов имеющее нечётное...

Алгоритм поиска количества элементов одномерного массива больших, чем среднее арифметическое значение всех
7. Алгоритм поиска количества элементов одномерного мас- сива больших, чем среднее арифметическое значение всех элементов массива.

Найти среднее арифметическое всех элементов массива х и номера элементов, имеющих минимальное и максимальное значения
Сгенерировать массив из 18 элементов случайных чисел от 0 до 100. Вывести массив на экран в три строки,по 6 элементов в каждой строке....

Найти среднее арифметическое элементов массива, имеющих нечетное значение
Дан массив А(25) на промежутке -20, 10. Найти среднее арифметическое элементов, имеющих несет ное значение. Написать алгоритм к программе.


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

Или воспользуйтесь поиском по форуму:
39
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru