Найти в массиве нечётные числа
Уровень сложности:
- Задание
- Решение
Дан массив размера 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 |
|||
1 |
BraunDe 7 / 7 / 4 Регистрация: 09.06.2013 Сообщений: 27 |
||||
14.06.2013, 23:28 |
3 |
|||
Так для справки скажу что
означает что % это остаток от деления, и если он равен нулю при делении на два, то число четное.
1 |
CekTopPopov 2 / 2 / 1 Регистрация: 12.06.2013 Сообщений: 57 |
||||
15.06.2013, 06:46 [ТС] |
4 |
|||
Так для справки скажу что
означает что % это остаток от деления, и если он равен нулю при делении на два, то число четное. Благодарю за справку!!! Ещё вопрос, если размер массива заранее неизвестен, например нужно ввести размер с клавиатуры, такое возможно? В учебнике все примеры по массивам с константой, сам пробовал сделать ввод с клавы, неудачно
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 |
|||||||
Немного не про то спрашивал.
вот есть код, размер массива тут константа, а мне нужно размер массива ввести с клавиатуры в программе. Например так:
0 |
Desu_Is_A_Lie 216 / 63 / 16 Регистрация: 26.02.2012 Сообщений: 114 |
||||
15.06.2013, 15:18 |
7 |
|||
1 |
xanderfomin 40 / 37 / 15 Регистрация: 25.10.2012 Сообщений: 112 |
||||
16.06.2013, 00:53 |
8 |
|||
Вот только не стоит приводить результат malloc, а по сути — всё верно.
0 |
216 / 63 / 16 Регистрация: 26.02.2012 Сообщений: 114 |
|
16.06.2013, 10:06 |
9 |
не стоит приводить результат 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 |
|||
после этих действий нужно создавать массив, а не раньше как у вас
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 |
Такой код не будет компилироваться, размер массива должен быть определен как константное выражение (надо пользоваться освобождением памяти) перед тем как писать такие высказывания попробуй скомпилировать сначала, код абсолютно рабочий (смотри вложение ) Миниатюры
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, []);
}