Как найти одномерный массив с нечетными элементами

Пусть дано:Вывести номера всех минимальных нечетных элементов. Нумерация
начинается с нуля. Если таких элементов нет, то вывести сообщение об
этом.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[k1]=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!=n1) // если справа от него есть элементы

for (int i=0; i<3; i++) // сдвиг три раза

{

int t=a[imax+1];

for (int j=imax+1; j<n1; j++) // сдвиг

a[j]=a[j+1];

a[n1]=t;

}

if (imax!=0) // если слева от него есть элементы

{

int t=a[imax1];

for (int j=imax1; j>0; j) // сдвиг

a[j]=a[j1];

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==i21)

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

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

Задача: Задайте одномерный массив, заполненный случайными числами. Найдите сумму элементов, стоящих на нечётных позициях

Содержание

  1. Пример:
  2. Решение:
  3. Пояснение:

Пример:

[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, чтобы перебрать все нечетные позиции элементов.

Похожий код:

Avatar photo

Программист, разработчик с 5 летним опытом работы. Учусь на разработчика игр на Unity и разработчика VR&AR реальности (виртуальной реальности). Основные языки программирования: C#, C++.

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

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

  • Как найти хозяина самсунга
  • Как правильно составить меню напитков
  • Как найти теоретическую массу вещества
  • Пропали гаджеты как найти
  • Как правильно составить задачу в первом классе

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

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