Как найти массивы нечетных чисел

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

Уровень сложности:






  • Задание
  • Решение

Дан массив размера 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

Следующие статьи помогут вам в решении данной задачи:

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.

2 / 2 / 1

Регистрация: 12.06.2013

Сообщений: 57

1

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

14.06.2013, 21:23. Показов 11514. Ответов 15


Студворк — интернет-сервис помощи студентам

Ребят, подскажите, у меня есть массив скажем A[10], мне нужно найти в нём чётные и нечётные элементы, подскажите как?



0



Desu_Is_A_Lie

216 / 63 / 16

Регистрация: 26.02.2012

Сообщений: 114

14.06.2013, 21:25

2

C
1
2
3
4
5
6
7
8
9
10
11
for (i = 0; i < 10; i++)
{
    if (A[i] % 2 == 0)
    {
        /*чётное*/
    }
    else
    {
        /*нечётное*/
    }
}



1



BraunDe

7 / 7 / 4

Регистрация: 09.06.2013

Сообщений: 27

14.06.2013, 23:28

3

Так для справки скажу что

C
1
(A[i] % 2 == 0)

означает что % это остаток от деления, и если он равен нулю при делении на два, то число четное.



1



CekTopPopov

2 / 2 / 1

Регистрация: 12.06.2013

Сообщений: 57

15.06.2013, 06:46

 [ТС]

4

Цитата
Сообщение от BraunDe
Посмотреть сообщение

Так для справки скажу что

C
1
(A[i] % 2 == 0)

означает что % это остаток от деления, и если он равен нулю при делении на два, то число четное.

Благодарю за справку!!! Ещё вопрос, если размер массива заранее неизвестен, например нужно ввести размер с клавиатуры, такое возможно? В учебнике все примеры по массивам с константой, сам пробовал сделать ввод с клавы, неудачно



0



216 / 63 / 16

Регистрация: 26.02.2012

Сообщений: 114

15.06.2013, 10:05

5

Если в переменной j хранится размер массива, то замекнить в цикле условие i < 10 на i < j.



1



CekTopPopov

2 / 2 / 1

Регистрация: 12.06.2013

Сообщений: 57

15.06.2013, 14:21

 [ТС]

6

Немного не про то спрашивал.

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
const int N=5;
int main()
{
int i, A[N], sum, count;
sum=0;
count=0;
printf("Vvedite massiv An");
for(i=0; i<N; i++){
    printf("Vvedite A[%d]=", i);
    scanf_s("%d", &A[i]);
    }
for(i=0; i<N; i++)
    {   
        if (A[i] % 2 == 0)
        {
        sum+=A[i];
        }
        
        else
        {
        count++;
        }   
    
    }
    printf("%dn", sum);
    printf("%dn", count);
_getch();
}

вот есть код, размер массива тут константа, а мне нужно размер массива ввести с клавиатуры в программе.

Например так:

C
1
2
printf("Введите размер массива N");
scanf("%d", &N);



0



Desu_Is_A_Lie

216 / 63 / 16

Регистрация: 26.02.2012

Сообщений: 114

15.06.2013, 15:18

7

C
1
2
3
4
5
6
7
8
9
int *A;
 
/*ввод N*/
 
A = (int*)malloc(N * sizeof(int));
 
/*работа с массивом*/
 
free(A);



1



xanderfomin

40 / 37 / 15

Регистрация: 25.10.2012

Сообщений: 112

16.06.2013, 00:53

8

Цитата
Сообщение от Desu_Is_A_Lie
Посмотреть сообщение

C
1
A = (int*)malloc(N * sizeof(int));

Вот только не стоит приводить результат malloc, а по сути — всё верно.



0



216 / 63 / 16

Регистрация: 26.02.2012

Сообщений: 114

16.06.2013, 10:06

9

Цитата
Сообщение от xanderfomin
Посмотреть сообщение

не стоит приводить результат malloc

В C практически везде видел приведение, а C++ компилятор вообще выдаст ошибку.



0



40 / 37 / 15

Регистрация: 25.10.2012

Сообщений: 112

16.06.2013, 13:31

10

Desu_Is_A_Lie, вот цитата из книги «Linux. Системное программирование» Роберта Лава:

Язык C автоматически повышает указатели на void при любых типах назначения. Таким образом, <…>, не требуется приводить тип возвращаемого значения malloc() к lvalue, используемому при назначении. Язык программирования C++, однако, не выполняет автоматическое повышение указателей void. Следовательно, пользователям C++ приходится приводить тип возвращаемого значения malloc() <…>. Некоторым программистам на C нравится приводить результат любой функции, возвращающей указатель на void, в том числе и malloc(). Я выступаю против этой практики, так как она скроет ошибку, если возвращаемое значение функции вдруг поменяется на что-то другое, отличное от указателя на void. Помимо этого, подобное приведение типов также прячет ошибку, если функция неправильно объявлена (Необъявленные функции по умолчанию возвращают значение типа int. Превращение целочисленного значения в указатель не может быть автоматическим, и при этом создаётся предупреждение. Приведение типа подавляет возвращения предупреждения). Хотя первый случай не является большим риском для malloc(), второй, определённо, скрывает опасность.

Его доводы мне кажутся достаточно убедительными, поэтому ИМХО стоит взять за правило отказ от приведения результата malloc().



1



shurikspk

408 / 227 / 43

Регистрация: 10.02.2013

Сообщений: 780

16.06.2013, 14:51

11

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

C
1
2
3
printf("Введите размер массива N");
scanf("%d", &N);
int A[N];



0



58 / 58 / 44

Регистрация: 06.10.2012

Сообщений: 98

16.06.2013, 15:07

12

Такой код не будет компилироваться, размер массива должен быть определен как константное выражение (надо пользоваться освобождением памяти)



0



408 / 227 / 43

Регистрация: 10.02.2013

Сообщений: 780

16.06.2013, 15:21

13

Цитата
Сообщение от Z_A_S
Посмотреть сообщение

Такой код не будет компилироваться, размер массива должен быть определен как константное выражение (надо пользоваться освобождением памяти)

перед тем как писать такие высказывания попробуй скомпилировать сначала, код абсолютно рабочий (смотри вложение )

Миниатюры

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



0



58 / 58 / 44

Регистрация: 06.10.2012

Сообщений: 98

16.06.2013, 15:48

14

Прошу:

Миниатюры

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



0



408 / 227 / 43

Регистрация: 10.02.2013

Сообщений: 780

16.06.2013, 15:51

15

ну по крайней мере Qt ест мою запись



0



58 / 58 / 44

Регистрация: 06.10.2012

Сообщений: 98

16.06.2013, 15:56

16

пропустил имя массива, но сути это не меняет

Миниатюры

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



0



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 =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;
}

Что тут не верно?Помогите исправить пожалуйста.Не серчайте,я только учусь работать с массивами…Задача всё ещё не решена.

От вас требуется рекурсивное решение.
С помощью одной функции, с опциональными параметрами:

function getOddList (count, current = 1, acc = []) {
  if (count == 0) return acc;
  return getOddList(count - 1, current + 2, acc.concat(current))
}

С вложенной функцией:

function getOddList (count) {
  function iter(n, current, acc) {
    if (n == count) return acc;
    return iter(n + 1, current + 2, acc.concat(current))
  }
  return iter(0, 1, []);
}

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Если ногти загибаются вниз как исправить
  • Как найти радиус правильной четырехугольной пирамиды
  • Skyrim как найти мою лошадь
  • Как найти руки скайрим
  • Если улетел квадрокоптер как его найти

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии