Пусть дано:Вывести номера всех минимальных нечетных элементов. Нумерация
начинается с нуля. Если таких элементов нет, то вывести сообщение об
этом.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;
}
Что тут не верно?Помогите исправить пожалуйста.Не серчайте,я только учусь работать с массивами…Задача всё ещё не решена.
Формулировка задачи:
Дан одномерный челочисленный масив А размерностью 16.Определить и показать все нечётные значения массива, а потом все чётные.Все первоначальные элементы массива вводятся с клавиатуры.
Код к задаче: «Одномерный целочисленный массив. Определить и показать все нечётные значения массива, а потом все чётные»
textual
var a:array[1..16] of integer; i:integer; begin WriteLn('Введите элементы массива:'); for i:=1 to 16 do begin Read(a[i]); end; Write('Нечетные элементы: '); for i:=1 to 16 do begin if a[i] mod 2 = 1 then write(a[i], ' '); end; WriteLn(); Write('Четные элементы: '); for i:=1 to 16 do begin if a[i] mod 2 = 0 then write(a[i], ' '); end; end.
Полезно ли:
13 голосов , оценка 3.769 из 5
Для целочисленного массива дубликаты присутствуют в нем таким образом, что все дубликаты появляются четное количество раз, кроме одного, который появляется нечетное количество раз. Найдите этот странный появляющийся элемент за линейное время и без использования дополнительной памяти.
Например,
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
С++. Задачи с решениями. Одномерные массивы
к списку всех задач на массивы
к списку всех задач
1. Удалить в массиве все числа, которые повторяются более двух раз.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
int main() { int a[100]; int n=10; int i, j, count=0; srand(time(NULL)); for (i = 0; i < n; i++) { a[i]=rand()%20; cout<<setw(4)<<a[i]; } cout<<endl; for (i = 0; i < n; i++) { count=1; for (j=i+1; j<n; j++) { if (a[j] == a[i]) count++; } if (count > 2) { int one=a[i]; for (j=i; j<n; j++) { if (a[j]==one) { // удаляем for (int k=j+1; k<n; k++) { a[k—1]=a[k]; } n—; j—; } } i—; } } // www.itmathrepetitor.ru if (n==0) cout<<«empty array»<<endl; else for (int p = 0; p < n; p++) { cout<<setw(4)<<a[p]; } cout<<endl; getch(); return 0; } |
2. Введите одномерный целочисленный массив. Найдите наибольший нечетный элемент. Далее трижды осуществите циклический сдвиг влево элементов, стоящих справа от найденного максимума, и один раз сдвиг элементов вправо, стоящих слева от найденного максимума.
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
int main() { int* a; int n; // ввод n с проверкой do { cout<<«input n: «; cin>>n; } while (n<1); // выделение памяти a=new int [n]; // ввод с консоли значений массива for (int i=0; i<n; i++) { cout<<«input a[«<<i<<«]: «; cin>>a[i]; } //вывод исходного массива на экран cout<<«start: «<<endl; for (int i=0; i<n; i++) cout<<a[i]<<» «; cout<<endl; // поиск наибольшего нечетного int imax=—1; for (int i=0; i<n; i++) if (a[i]%2==1) { if (imax==—1) imax=i; else if (a[imax]<a[i]) imax=i; } if (imax==—1) // если нечетных нет вообще cout<<«no odd number»<<endl; else { // вывод на консоль наибольшего нечетного cout<<«max odd number: «<<a[imax]<<endl; cout<<«index : «<<imax<<endl; if (imax!=n—1) // если справа от него есть элементы for (int i=0; i<3; i++) // сдвиг три раза { int t=a[imax+1]; for (int j=imax+1; j<n—1; j++) // сдвиг a[j]=a[j+1]; a[n—1]=t; } if (imax!=0) // если слева от него есть элементы { int t=a[imax—1]; for (int j=imax—1; j>0; j—) // сдвиг a[j]=a[j—1]; a[0]=t; } // вывод на консоль результат cout<<«end: «<<endl; for (int i=0; i<n; i++) cout<<a[i]<<» «; cout<<endl; } // удаление памяти delete [] a; getch(); return 0; } |
3. Найдите сумму отрицательных элементов массива.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
int sum=0; for (int i=0; i<n; i++) { if (a[i]<0) { sum+=a[i]; } } if (!sum) { cout<<«no numbers < 0»; } else { cout<<«sum = «<<sum; } |
4. Найдите произведение элементов массива с нечетными номерами.
int p=1; for (int i=1; i<n; i+=2) { p*=a[i]; } cout<<«answer: «<<p<<endl; |
5. Найдите сумму элементов массива между двумя первыми нулями. Если двух нулей нет в массиве, то выведите ноль.
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 29 30 31 32 |
int i1=—1, i2=—1; for (int i=0; i<n; i++) { // www.itmathrepetitor.ru if (!a[i]) { if (i1==—1) i1=i; else if (i2==—1) i2=i; else break; } } if (i2==—1) { cout<<0; } else { if (i1==i2—1) cout<<«no numbers between zeros»; else { int s=0; for (int i=i1+1; i<i2; i++) s+=a[i]; cout<<«sum = «<<s; } } |
6. Найдите наибольший элемент массива.
int max=0; for (int i=1; i<n; i++) { if (a[i]>max) max=a[i]; } cout<<«max: «<<max<<endl; |
7. Найдите наименьший четный элемент массива. Если такого нет, то выведите первый элемент.
int imin=—1; for (int i=0; i<n; i++) { if ((!(a[i]%2) && (imin==—1 || a[imin]>a[i])) imin=i; } if (imin==—1) cout<<a[0]; else cout<<a[imin]<<endl; |
8. Преобразовать массив так, чтобы сначала шли нулевые элементы, а затем все остальные.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
int i1=0, i2=n—1; while (i1<i2) { // www.itmathrepetitor.ru while (i1 < i2 && !a[i1]) i1++; while (i2 > i1 && a[i2]) i2—; if (i1 < i2) { int tmp=a[i1]; a[i1]=a[i2]; a[i2]=tmp; } i1++; i2—; } |
9. Найдите сумму номеров минимального и максимального элементов.
int imax=0, imin=0; for (int i=1; i < n; i++) { if (a[i]>a[imax]) imax=i; if (a[i]<a[imin]) imin=i; } cout<<«answer: «<<imin+imax<<endl; |
10. Найдите минимальный по модулю элемент массива.
int min=abs(a[0]); for (int i = 1; i < n; i++) { if (min>abs(a[i])) min=a[i]; } // www.itmathrepetitor.ru cout<<«abs min: «<<min<<endl; |
Перейти к содержанию
Знакомство с языком программирования С#: Задайте одномерный массив, заполненный случайными числами. Найдите сумму элементов, стоящих на нечётных позициях
На чтение 2 мин Просмотров 430 Опубликовано 05.03.2023
Обновлено 05.03.2023
Задача: Задайте одномерный массив, заполненный случайными числами. Найдите сумму элементов, стоящих на нечётных позициях
Содержание
- Пример:
- Решение:
- Пояснение:
Пример:
[3, 7, 23, 12] ->26
[-4, -6, 89, 6] -> 84
Решение:
Console.Write(«Введите количество элементов массива: «);
int a = Convert.ToInt32(Console.ReadLine());
int[] randomArray = new int[a];void mas(int a)
{
for (int i = 0; i < a; i++)
{
randomArray[i] = new Random().Next(1,9);
Console.Write(randomArray[i] + » «);
}}
int kol(int[] randomArray)
{
int sum = 0;
int i = 0;
while (i < randomArray.Length)
{
sum = sum + randomArray[i];
i = i + 2;
}
return sum;
}mas(a);
Console.Write($»nCумма элементов, стоящих на нечётных позициях: {kol(randomArray)}»);
Пояснение:
Задача с перебором элементов, которые находятся на нечетных позициях в одномерном массиве. Используется цикл while, где просто к переменной i добавляется 2, чтобы перебрать все нечетные позиции элементов.
Похожий код:
Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.