nums = [1,2,3,4,5,6,7,8,9,10,11,12]
odds = [ n for n in nums if n%2 ]
print odds
Gives:
>>>
[1, 3, 5, 7, 9, 11]
This can be put into a function like so:
def getOdds(aList):
return [ n for n in aList if n%2 ]
Example usage:
myOdds = getOdds(nums)
print("{0} has {1} odd numbers which were {2}".format(nums,len(myOdds),myOdds))
print("The odd numbers sum to {0}".format(sum(myOdds)))
Produces:
>>>
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] has 6 odd numbers which were [1, 3, 5, 7, 9, 11]
The odd numbers sum to 36
As to what you’re doing wrong, you’re iterating over an iterable containing the elements 0
to size
this won’t always be the value of num
(unless num
is indeed range(size)
). Once you make i
represent a value in num
which you’re iterating over, if i%2 == 0
will mean it’s even, if you want odds, the number musn’t be divisible by two. Hence this should be changed to either if i%2 != 0
or if i%2
. You will also have to declare the odd
list before the for i ...
loop, so you can append the numbers in num
which meet the condition in the if i%2
selection control structure. You should appened the number in num
by doing odd.append(i)
, at the moment you’re reassigning odd a new value. You also should not be incrementing i
. ‘i’ should represent a number in num
not the index of the number in num
.
Найти в массиве нечётные числа
Уровень сложности:
- Задание
- Решение
Дан массив размера n
, заполнить его случайными числами, Найти все нечётные числа массива.
Читаем у нас на сайте — Как работать с массивами. После создания массива, его необходимо заполнить случайными числами, а для этого нужно воспользоваться генератором случайных чисел. Пример работы программы смотрим ниже:
// array_even_numbers.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include <iostream> #include <ctime> using namespace std; int main(int argc, char* argv[]) { srand(time(0)); // генерация случайных чисел cout << "Enter size array: "; int array_size; cin >> array_size; int *ptrarray = new int [array_size]; // создание динамического массива for (int count = 0; count < array_size; count++) ptrarray[count] = (rand() % 99 + 1); //заполнение массива случайными числами с масштабированием от 1 до 99 cout << "array = "; for (int count = 0; count < array_size; count++) cout << ptrarray[count] << " "; // печать первоначального массива cout << "nRezult = "; for (int count = 0; count < array_size; count++) if ((ptrarray[count] % 2) != 0) // отсеиваем чётные числа cout << ptrarray[count] << " "; // печать нечётных значений элементов массива delete [] ptrarray; // высвобождение памяти cout << endl; system("pause"); return 0; }
Создаётся динамический массив, который заполняется случайными числами в диапазоне [1;99] и выполняется поиск нечётных чисел. Вот результат:
CppStudio.com
Enter size array: 20
array = 60 78 78 77 75 94 49 7 8 81 35 94 8 38 29 31 76 42 12 67
Rezult = 77 75 49 7 81 35 29 31 67
Следующие статьи помогут вам в решении данной задачи:
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.
Для целочисленного массива дубликаты присутствуют в нем таким образом, что все дубликаты появляются четное количество раз, кроме одного, который появляется нечетное количество раз. Найдите этот странный появляющийся элемент за линейное время и без использования дополнительной памяти.
Например,
Input: arr[] = [4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3]
Output: The odd occurring element is 4
Потренируйтесь в этой проблеме
Для ввода, содержащего n
элементы, мы можем использовать Хеширование решить эту проблему в O(n) время. Сначала мы просматриваем массив и сохраняем частоту каждого элемента в хеш-таблице. Затем, после обработки каждого элемента массива, вернуть элемент с нечетной частотой. Проблема этого подхода в том, что он требует O(n) также дополнительное пространство. Кроме того, требуется один обход массива и один обход хеш-таблицы.
Мы можем решить эту проблему за один обход массива и константного пространства. Идея состоит в том, чтобы использовать оператор XOR. Мы знаем, что если мы используем XOR числа с самим собой нечетное количество раз, результатом будет само число; в противном случае, если мы выполняем XOR числа четное количество раз с самим собой, результатом будет 0. Кроме того, XOR числа с 0 всегда является самим числом.
XOR of ‘x’ with 0:
x ^ 0 = x
XOR of ‘x’ with itself even number of times:
x ^ x = 0
x ^ x ^ x ^ x = (x ^ x) ^ (x ^ x) = 0 ^ 0 = 0
XOR of ‘x’ with itself odd number of times:
(x ^ x ^ x) = (x ^ (x ^ x)) = (x ^ 0) = x
(x ^ x ^ x ^ x ^ x) = (x ^ (x ^ x) ^ (x ^ x)) = (x ^ 0 ^ 0) = x
Итак, если мы возьмем XOR для всех элементов массива, даже появляющиеся элементы отменят друг друга, и у нас останется единственный нечетный появляющийся элемент. Ниже приведена реализация этой идеи на C, Java и Python:
C
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#include <stdio.h> // Функция для поиска нечетного элемента в заданном массиве int findOddOccuring(int arr[], int n) { int xor = 0; for (int i = 0; i < n; i++) { xor = xor ^ arr[i]; } return xor; } int main() { int arr[] = { 4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3 }; int n = sizeof(arr) / sizeof(arr[0]); printf(“The odd occurring element is %d”, findOddOccuring(arr, n)); return 0; } |
Скачать Выполнить код
результат:
The odd occurring element is 4
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#include <iostream> #include <vector> #include <numeric> using namespace std; // Функция для поиска нечетного элемента в заданном массиве int findOddOccuring(vector<int> const &arr) { return accumulate(arr.begin(), next(arr.begin(), arr.size()), 0, bit_xor<int>()); } int main() { vector<int> arr = { 4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3 }; cout << “The odd occurring element is “ << findOddOccuring(arr); return 0; } |
Скачать Выполнить код
результат:
The odd occurring element is 4
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
class Main { // Функция для поиска нечетного элемента в заданном массиве public static int findOddOccuring(int[] arr) { int xor = 0; for (int i: arr) { xor = xor ^ i; } return xor; } public static void main(String[] args) { int[] arr = { 4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3 }; System.out.println(“The odd occurring element is “ + findOddOccuring(arr)); } } |
Скачать Выполнить код
результат:
The odd occurring element is 4
Python
# Функция для поиска нечетного элемента в заданном списке def findOddOccuring(arr): xor = 0 for i in arr: xor = xor ^ i return xor if __name__ == ‘__main__’: arr = [4, 3, 6, 2, 6, 4, 2, 3, 4, 3, 3] print(‘The odd occurring element is’, findOddOccuring(arr)) |
Скачать Выполнить код
результат:
The odd occurring element is 4
Пусть дано:Вывести номера всех минимальных нечетных элементов. Нумерация
начинается с нуля. Если таких элементов нет, то вывести сообщение об
этом.n =8 Массив =0, 5, 9, 1, 2, 7, 1, 3 Результат = 3 6
n =8 Массив= 2, 6, 10, 6, 8, 8, 8, 2 Результат = нечетных элементов нет
Вот мой вариант:
//вывести номера всех минимальных нечётных элементов массива
#include <iostream>
using namespace std;
int main()
{
setlocale(LC_ALL, "Rus");
int n;
cout << "Введите размерность массива - ";
cin >> n;
int* a = new int[n];
for (int i = 0; i < n; i++)
{
cout << "a[" << i << "]= ";
cin >> a[i];
}
int min = a[0];
for (int i = 0; i < n; i++)
{
if (a[i] % 2 != 0)
{
if (a[i] < min) min = a[i];
}
else if (a[i] == min)
cout << "Номера всех минимальных нечётных элементов равна " << n;
cout << endl;
}
if (min % 2 == 0)
cout << "не чётных элементов нет/n" << endl;
cout << min << endl;
delete []a;
return 0;
}
Что тут не верно?Помогите исправить пожалуйста.Не серчайте,я только учусь работать с массивами…Задача всё ещё не решена.
Gennady
Гений
(59304)
12 лет назад
Что значит “формулу”? А найти просто. Просмотреть весь масссив и тупо посчитать количество нечетных элементов.
K := 0;
for i:=1 to N do if A[ i ] mod 2 = 1 then K := K + 1;
Яков
Гуру
(2729)
12 лет назад
если (элемент делить на два равно еденице) то увеличить счетчик нечетных элементов;
if (arr/2=1) then count:=count+1;
Дядя Ваня
Профи
(959)
12 лет назад
паскаль не знаю, знаю другие.. .
Через цикл проходишь оп масиву смоттришь если элемент делится на два без с остатком значит нечетно.. .
и делаешь какую то переменну +1 …по моему это mid если не ошибаюсь в паскале