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

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

06.05.2014, 15:18. Показов 5476. Ответов 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
8217 / 5048 / 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,361
06.01.2015, 00:58
Цитата Сообщение от MrGluck Посмотреть сообщение
Меньше букв - меньше ошибок.
Всегда?!
0
Почетный модератор
Эксперт HTML/CSSЭксперт PHP
 Аватар для KOPOJI
16844 / 6725 / 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 / 6725 / 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
12844 / 7593 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
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
8217 / 5048 / 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 / 6725 / 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
8217 / 5048 / 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
9674 / 4826 / 763
Регистрация: 17.04.2012
Сообщений: 9,665
Записей в блоге: 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
8217 / 5048 / 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
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru