Нечетный массив элемента как найти

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 если не ошибаюсь в паскале

Добавить комментарий