Как найти номер элемента массива по значению

Можно ли в java узнать индекс элемента в ArrayList, если известно значение?

При нажатии на пункт списка показывает значения

@Override
public int getItemCount() {
    return mFilteredCheeses.size();
}

public void filter(String query) {
    mFilteredCheeses = new ArrayList<>();
    for (String cheese : mDefaultCheeses) {
        if(cheese.toLowerCase().contains(query.toLowerCase())) {
            mFilteredCheeses.add(cheese);
        }
    }
    notifyDataSetChanged();
}

А есть ли возможность узнать индекс элемента, например со значением Макс?

Александр Семпроний  Гракх's user avatar

задан 16 сен 2016 в 21:42

 Artsait 's user avatar

0

Есть у ArrayList метод indexOf – он как раз ищет подходящий элемент и выводит его индекс.

ArrayList<Object> test = new ArrayList<>();
test.add("yo");
test.add("yo2");
System.out.println(test.indexOf("yo2")); // Выведет: 1

Если в списке несколько одинаковых значений, то выведет индекс первого попавшегося.

Mihail Kolomiets's user avatar

ответ дан 16 сен 2016 в 21:53

Алексей Шиманский's user avatar

Алексей ШиманскийАлексей Шиманский

72.2k11 золотых знаков87 серебряных знаков173 бронзовых знака

3

Смотря что Вы хотите сделать под формулировкой макс.
Если это последний индекс нужного элемента то lastIndexOf(value).
Можно через цикл, и там через условие то что Вам надо. напишите подробнее если это не подходит.

    ArrayList<Object> test = new ArrayList<>();
    test.add("yo");
    test.add("yo2");
    test.add("yo3");
    test.add("yo2");
    System.out.println(test.indexOf("yo2"));
    System.out.println(test.lastIndexOf("yo2"));

ответ дан 17 сен 2016 в 9:50

makson's user avatar

maksonmakson

5163 серебряных знака19 бронзовых знаков

1

В этом посте будет обсуждаться, как найти индекс элемента в массиве примитивов или объектов в Java.

Решение должно либо возвращать индекс первого вхождения требуемого элемента, либо -1, если его нет в массиве.

1. Наивное решение — линейный поиск

Наивное решение состоит в том, чтобы выполнить линейный поиск в заданном массиве, чтобы определить, присутствует ли целевой элемент в массиве.

⮚ Для примитивных массивов:

// Метод поиска индекса элемента в примитивном массиве в Java

public static int find(int[] a, int target)

{

    for (int i = 0; i < a.length; i++)

    {

        if (a[i] == target) {

            return i;

        }

    }

    return 1;

}

⮚ Для массивов объектов:

// Общий метод для поиска индекса элемента в массиве объектов в Java

public static<T> int find(T[] a, T target)

{

    for (int i = 0; i < a.length; i++)

    {

        if (target.equals(a[i])) {

            return i;

        }

    }

    return 1;

}

2. Использование потока Java 8

Мы можем использовать Java 8 Stream для поиска индекса элемента в массиве примитивов и объектов, как показано ниже:

⮚ Для примитивных массивов:

// Метод поиска индекса элемента в примитивном массиве в Java

public static int find(int[] a, int target)

{

    return IntStream.range(0, a.length)

                    .filter(i -> target == a[i])

                    .findFirst()

                    .orElse(1);    // вернуть -1, если цель не найдена

}

⮚ Для массивов объектов:

// Общий метод для поиска индекса элемента в массиве объектов в Java

public static<T> int find(T[] a, T target)

{

    return IntStream.range(0, a.length)

                    .filter(i -> target.equals(a[i]))

                    .findFirst()

                    .orElse(1);    // вернуть -1, если цель не найдена

}

3. Преобразовать в список

Идея состоит в том, чтобы преобразовать данный массив в список и использовать List.indexOf() метод, который возвращает индекс первого вхождения указанного элемента в этом списке.

⮚ Для примитивных массивов:

Как преобразовать примитивный целочисленный массив в List<Integer>?

// Метод поиска индекса элемента в примитивном массиве в Java

public static int find(int[] a, int target)

{

    return Arrays.stream(a)                     // IntStream

                .boxed()                        // Stream<Integer>

                .collect(Collectors.toList())   // List<Integer>

                .indexOf(target);

}

⮚ Для массивов объектов:

Как преобразовать массив объектов в список?

// Общий метод для поиска индекса элемента в массиве объектов в Java

public static<T> int find(T[] a, T target) {

    return Arrays.asList(a).indexOf(target);

}

4. Бинарный поиск отсортированных массивов

Для отсортированных массивов мы можем использовать Алгоритм бинарного поиска для поиска указанного массива для указанного значения.

⮚ Для примитивных массивов:

// Метод поиска индекса элемента в примитивном массиве в Java

public static int find(int[] a, int target)

{

    int index = Arrays.binarySearch(a, target);

    return (index < 0) ? 1 : index;

}

⮚ Для массивов объектов:

// Общий метод для поиска индекса элемента в массиве объектов в Java

public static<T> int find(T[] a, T target)

{

    int index = Arrays.binarySearch(a, target);

    return (index < 0) ? 1 : index;

}

5. Использование библиотеки Guava

⮚ Для примитивных массивов:

Библиотека Guava предоставляет несколько служебных классов, относящихся к примитивам, например Ints для инт, Longs надолго, Doubles на двоих, Floats для поплавка, Booleans для логического значения и так далее.

Каждый класс полезности имеет indexOf() метод, который возвращает индекс первого появления цели в массиве. Мы также можем использовать lastIndexOf() чтобы вернуть индекс последнего появления цели в массиве.

// Метод поиска индекса элемента в примитивном массиве в Java

public static int find(int[] a, int target) {

    return Ints.indexOf(a, target);

}

⮚ Для массивов объектов:

Guava’s com.google.commons.collect.Iterables класс содержит статический служебный метод indexOf(Iterator, Predicate) который возвращает индекс первого элемента, удовлетворяющего предоставленному предикату, или -1, если итератор не имеет таких элементов.

// Общий метод для поиска индекса элемента в массиве объектов в Java

public static<T> int find(T[] a, T target)

{

    int index = Iterators.indexOf(Iterators.forArray(a), new Predicate<T>()

    {

        public boolean apply(T input) {

            return input.equals(target);

        }

    });

    return index;

}

 
Мы также можем использовать com.google.common.base.Predicates класс, предоставляемый Guava, который содержит статические служебные методы, относящиеся к Predicate экземпляры.

// Общий метод для поиска индекса элемента в массиве объектов в Java

public static<T> int find(T[] a, T target)

{

    int index = Iterators.indexOf(Iterators.forArray(a),

                            Predicates.in(Collections.singleton(target)));

    return index;

}

 
Для Java 8 и выше мы можем использовать лямбда-выражения:

// Общий метод для поиска индекса элемента в массиве объектов в Java

public static<T> int find(T[] a, T target) {

    return Iterators.indexOf(Iterators.forArray(a), x -> x.equals(target));

}

6. Использование Apache Commons Lang

Apache Commons Ланг ArrayUtils класс содержит несколько статических служебных методов, которые работают с массивами примитивов или объектов. Он обеспечивает indexOf() метод, который находит индекс заданного значения в массиве.

⮚ Для примитивных массивов:

// Метод поиска индекса элемента в примитивном массиве в Java

public static int find(int[] a, int target) {

    return ArrayUtils.indexOf(a, target);

}

⮚ Для массивов объектов:

// Общий метод для поиска индекса элемента в массиве объектов в Java

public static<T> int find(T[] a, T target) {

    return ArrayUtils.indexOf(a, target);

}

Вот и все, что касается поиска индекса элемента в массиве в Java.

Для примера возьмём массив из строк, чтобы сравнивать буквы, а не числа. Так легче понять. Всего 10 элементов в массиве.

var massiv = ["qw","qe","qr","as","ad","af","zx","zc","zv","qaz"]

Десять строк в массиве - JavaScript

Десять строк в массиве — JavaScript

Как узнать под каким индексом находится элемент в массиве?

В этом нам поможет метод прототипов объекта Array — findIndex(). Он проверяет элементы массива по какому-то определённому условию. Если «условие выполняется«(true) и элемент находится в массиве, тогда возвращается его индекс (целое положительное число или 0). Если «условие НЕ выполняется«(false) и элемент не найден в массиве, тогда возвращается «-1».

Важно отметить, что если в массиве будет несколько одинаковых значений у разных элементов, то метод findIndex() достанет только самый первый из них.

И ещё, метод findIndex() создаёт новый массив и не изменяет тот, на котором вызывается. Это важно для сохранности данных.

Решаем вопрос

Пробуем получить индекс элемента, у которого значение «zx»

massiv.findIndex(i => i == "zx")
6 // результат - номер индекса
massiv.findIndex(i => i == "as")
3 // результат - номер индекса
massiv.findIndex(i => i == "qw")
0 // результат - номер индекса

Для каждого элемента i мы проверили условие, что i равняется строковому значению. Когда метод находил совпадения, тогда он возвращал номер индекса, существующего элемента.

Метод findIndex вернул индексы - JavaScript

Метод findIndex вернул индексы — JavaScript

Пробуем получить индекс элемента, которого нет в массиве

massiv.findIndex(i => i == "ty")
-1 // индекса нет
massiv.findIndex(i => i == "gh")
-1 // индекса нет
massiv.findIndex(i => i == "bn")
-1 // индекса нет

Метод findIndex не нашёл элементы по значению - JavaScript

Метод findIndex не нашёл элементы по значению — JavaScript

Если в массиве несколько одинаковых значений?

Добавим несколько одинаковых элементов в массив:

massiv[10] = "as"
massiv[11] = "as"

12 строк в массиве - JavaScript

12 строк в массиве — JavaScript

Теперь, если мы попробуем получить индекс элемента, который содержит «as», то мы получим только индекс 3. Индексы 10 и 11 мы не увидим.

Только индекс первого совпадения - JavaScript

Только индекс первого совпадения — JavaScript

Читай публикацию JavaScript | Как получить индексы элементов с одинаковыми значениями в массиве?, чтобы понять как решить эту задачу.

Информационные ссылки

JavaScript | Массивы (Array)

findIndex() — метод прототипов объекта Array

Стандарт ECMAScript — Living Standard — https://tc39.es/ecma262/#sec-array.prototype.findindex

Как по проще, зная элемент, определить его номер в массиве?



Ученик

(239),
закрыт



5 лет назад

Дополнен 5 лет назад

Разумеется, можно тупо записать каждому элементу его номер в соответствующий атрибут. Но некоторые валидаторы при виде нестандартного атрибута начинают верещать

Дополнен 5 лет назад

Кажется, вариант для некоторых случаев (для DOM -элементов) нашел. Если каждому элементу присвоить номер в атрибуте data-имя_аттриб, то валидацию вроде пройдет. Т. е. data-position = 1, data-position = 2… Причем везде кроме 10-Ослика и ниже можно обратиться к таким атрибутам по свойству: элемент. dataset.имя_аттриб
i = imgChosen.dataset.position

AlexBrin

Мыслитель

(5000)


5 лет назад

Сразу видно, что два предыдущих ответа от тех, кто не знает языка

array.indexOf(‘значение’)
Вернет ключ, если элемент найден (от 0 и больше)
Если значения нет, то вернет -1
Важно: indexOf проводит строгое сравнивание (то есть ===)

Андрей

Высший разум

(267337)


5 лет назад

А зачем использовать нестандартные атрибуты? Для этих целей существует специальный тип произвольных пользовательских атрибутов, имеющих префикс “data-“. Так что можешь написать data-id=”3″ или data-number=”17” – и это будет полностью соответствовать стандарту HTML. И для работы с data-атрибутами в JavaScript есть специальный набор методов.

Подробности: https://webref.ru/html/attr/data

0 / 0 / 0

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

Сообщений: 15

1

Определить индекс элемента массива имеющего заданное значение

07.10.2020, 19:34. Показов 22153. Ответов 17


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

Ребята, завтра нужно сдать задачи. Сам не успеваю все сделать, поэтому хотел бы попросить вас помочь с частью задачек. Cтудент ВМК МГУ 1 курс

1) Составить программу, выдающую индексы заданного элемента или сообщающую, что такого элемента в массиве нет.



0



Programming

Эксперт

94731 / 64177 / 26122

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

Сообщений: 116,782

07.10.2020, 19:34

17

NQUARE

Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

07.10.2020, 21:17

2

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
const int n = 10;
int a[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, idx = 0, el;
 
int main() {
    cout << "Enter element for search: "; cin >> el;
    
    for (int i = 0; i < n; ++i) if (a[i] == el) idx = i;
 
    if (idx) cout << "Index " << el << " = " << idx << 'n';
    else cout << "There is no such element in array!" << 'n';
 
    return 0;
}

Ну или если

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

заданного элемента

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
const int n = 10;
int a[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, idx = 0, el = 8;
 
int main() {
    for (int i = 0; i < n; ++i) if (a[i] == el) idx = i;
 
    if (idx) cout << "Index " << el << " = " << idx << 'n';
    else cout << "There is no such element in array!" << 'n';
 
    return 0;
}



1



0 / 0 / 0

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

Сообщений: 15

07.10.2020, 22:14

 [ТС]

3

Добавлено через 2 минуты
Огромное спасибо

Добавлено через 12 минут
NQUARE, только если вводить 1 то получается что такого элемента массива нет



0



76 / 68 / 10

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

Сообщений: 320

08.10.2020, 00:10

4

Потому что проверка if (idx) не проходится, если индекс 0.



0



NQUARE

Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

08.10.2020, 06:42

5

Лучший ответ Сообщение было отмечено studentmsu569 как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
 
using namespace std;
 
const int n = 10;
int a[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, idx = -1, el = 8;
 
int main() {
    for (int i = 0; i < n; ++i) if (a[i] == el) idx = i;
 
    if (idx != -1) cout << "Index " << el << " = " << idx << 'n';
    else cout << "There is no such element in array!" << 'n';
 
    return 0;
}

Добавлено через 2 минуты

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
 
using namespace std;
 
const int n = 10;
int a[n] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}, idx = -1, el;
 
int main() {
    cout << "Enter element for search: "; cin >> el;
    
    for (int i = 0; i < n; ++i) if (a[i] == el) idx = i;
 
    if (idx != -1) cout << "Index " << el << " = " << idx << 'n';
    else cout << "There is no such element in array!" << 'n';
 
    return 0;
}

Добавлено через 1 минуту

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

idx != -1

Можно и idx >= 0



0



0 / 0 / 0

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

Сообщений: 15

08.10.2020, 09:14

 [ТС]

6

NQUARE, спасибо за все ответы, не мог бы ты еще помочь с этим, если найдется время:

В одномерном массиве, состоящем из n вещественных элементов, вычислить:
-минимальный по модулю элемент массива;
-сумму модулей элементов массива, расположенных после первого элемента, целая часть которого равна нулю.
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине – элементы, стояв-шие в нечетных позициях.



0



NQUARE

Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

08.10.2020, 10:20

7

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

-минимальный по модулю элемент массива;

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include <cmath>
 
const int n = 5;
float mn = 2147483647.00, arr[n] = {1.57, -75.20, 90.01, -12.34, 12.34};
 
int main() {
    for (int i = 0; i < n; ++i) {
        if (fabs(arr[i]) < fabs(mn)) mn = arr[i];
    }
    std::cout << mn << 'n';
    return 0;
}

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

сумму модулей элементов массива, расположенных после первого элемента, целая часть которого равна нулю.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <cmath>
 
using namespace std;
 
const int n = 5;
float arr[n] = {1.57, -0.20, 0.01, -12.34, 0.34}, sum = 0;
int idx = 0;
 
int main() {
    for (int i = 0; i < n; ++i) 
        if ((int)arr[i] == 0) {idx = i; break;}
 
    for (int i = idx + 1; i < n; ++i) sum += abs(arr[i]);
    std::cout << sum << 'n';
 
    return 0;
}

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

Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине – элементы, стояв-шие в нечетных позициях.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
const int n = 5;
float arr[n] = {1.57, -0.20, 0.01, -12.34, 0.34};
int el = 0;
 
int main() {
    for (int i = 1; i < n; ++i)
        if (i % 2 == 0) {std::swap(arr[i], arr[el]); ++el;}
 
    for (int i = 0; i < n; ++i) 
        std::cout << arr[i] << ' ';
    return 0;
}

Добавлено через 3 минуты
studentmsu569, Вот



0



studentmsu569

0 / 0 / 0

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

Сообщений: 15

08.10.2020, 10:42

 [ТС]

8

NQUARE, мне уже неудобно, но забыл важную деталь в условии:

Составить программу с использованием одномерных массивов для решения задачи на переупорядочивание элементов массива. Создать исходный массив, используя генератор случайных чисел.

Вот пример программы, в которой создается массив вещественных случайных чисел в диапазоне от -5 до 7, если это ускорит процесс:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
using namespace std;
int main()
{
    system("chcp 1251 > nul");
    const int n = 1000;
    double a[n];
    int i, kol_a;
    cout << "Введите количество элементов : ";
    cin >> kol_a;
    if (kol_a > n)
    {
        cout << "Превышение размера массива" << endl;
        return 1;
    }
    for (int i = 0; i < kol_a; i++)
        a[i] = -5 + (7 - (-5)) * rand() / (double)RAND_MAX;
    for (int i = 0; i < kol_a; i++) cout << a[i] << " ";
    cout << endl;
    
    system("pause");
    return 0;
}



0



Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

08.10.2020, 11:02

9

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

Составить программу с использованием одномерных массивов для решения задачи на переупорядочивание элементов массива. Создать исходный массив, используя генератор случайных чисел.

Что то я не понял, можно как то по подробней



0



0 / 0 / 0

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

Сообщений: 15

08.10.2020, 11:15

 [ТС]

10

NQUARE, NQUARE, в условии перед этим всем, числа нужно определять рандомом, то есть составить рандомный массив, и только потом выполнять с этим рандомным массивом эти три операции



0



NQUARE

Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

08.10.2020, 11:26

11

studentmsu569, Типо так?:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
 
const int n = 5;
float arr[n];
int el = 0;
 
int main() {
    for (int i = 0; i < n; ++i) {
        arr[i] = -5 + (7 - (-5)) * rand() / (double)RAND_MAX;
        std::cout << arr[i] << ' ';
    }
    std::cout << 'n';
 
    for (int i = 1; i < n; ++i)
        if (i % 2 == 0) {std::swap(arr[i], arr[el]); ++el;}
 
    for (int i = 0; i < n; ++i)
        std::cout << arr[i] << ' ';
 
    return 0;
}



0



0 / 0 / 0

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

Сообщений: 15

08.10.2020, 11:35

 [ТС]

12

NQUARE, дааа все так)))



0



NQUARE

Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

08.10.2020, 11:38

13

Вот всё вместе:

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
29
30
31
#include <iostream>
#include <cmath>
 
const int n = 5;
float mn = 2147483647.00, sum = 0, arr[n];
int idx = 0, el = 0;
 
int main() {
    for (int i = 0; i < n; ++i) {
        arr[i] = -5 + (7 - (-5)) * rand() / (double)RAND_MAX;
        if (fabs(arr[i]) < fabs(mn)) mn = arr[i];
        std::cout << arr[i] << ' ';
    }
    std::cout << 'n' << mn << 'n';
 
 
    for (int i = 0; i < n; ++i) 
        if ((int)arr[i] == 0) {idx = i; break;}
 
    for (int i = idx + 1; i < n; ++i) sum += abs(arr[i]);
    std::cout << sum << 'n';
 
 
    for (int i = 1; i < n; ++i)
        if (i % 2 == 0) {std::swap(arr[i], arr[el]); ++el;}
 
    for (int i = 0; i < n; ++i) 
        std::cout << arr[i] << ' ';
 
    return 0;
}



0



0 / 0 / 0

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

Сообщений: 15

08.10.2020, 11:54

 [ТС]

14

NQUARE, еще небольшой вопросик

в условии к второму написано :

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

-сумму модулей элементов массива, расположенных после первого элемента, целая часть которого равна нулю.

целая часть которого равна нулю, получается у нас 12 не должно быть в сумме? или я просто чего-то не понимаю?

Добавлено через 4 минуты

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

чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине – элементы, стояв-шие в нечетных позициях.

NQUARE, выводит наоборот сначала нечетные, а потом четные, или опять же может я просто тупой



0



Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

08.10.2020, 11:57

15

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

выводит наоборот сначала нечетные

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

Код

-4.98498 1.76302 -2.68035 4.70489 2.02011
1.76302
9
-2.68035 2.02011 -4.98498 4.70489 1.76302



0



0 / 0 / 0

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

Сообщений: 15

08.10.2020, 12:02

 [ТС]

16

NQUARE, но он же сначала выводит 3 5 1 элемент а потом 2 и 4

3 5 1 это нечетные числа насколько я знаю



0



Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

08.10.2020, 12:08

17

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

елая часть которого равна нулю, получается у нас 12 не должно быть в сумме? или я просто чего-то не понимаю?

А, нет, это я вас не правильно понял. Сейчас постараюсь объяснить

Добавлено через 3 минуты

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

но он же сначала выводит 3 5 1 элемент а потом 2 и 4

А вам нечётный по номеру надо было? Я сделал по индексу

Добавлено через 1 минуту
Всё, я отлетаю, вечером помогу



0



NQUARE

Искусственный интеллект

112 / 82 / 34

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

Сообщений: 590

Записей в блоге: 1

08.10.2020, 19:59

18

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

в условии к второму написано :
-сумму модулей элементов массива, расположенных после первого элемента, целая часть которого равна нулю.
целая часть которого равна нулю, получается у нас 12 не должно быть в сумме? или я просто чего-то не понимаю?

Я не пойму, сумму модулей элементов массива целая часть которых равна нулю и которые стоят после первого элемента, или всё таки сумму модулей элементов массива, расположенных после первого элемента целая часть которого равна нулю???

Добавлено через 41 секунду

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

елая часть которого равна нулю, получается у нас 12 не должно быть в сумме? или я просто чего-то не понимаю?

Если вы правильно написали условие, то нет.

Добавлено через 1 минуту
Вот программа полностью соответствующая Вашему условию:

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
#include <iostream>
#include <cmath>
 
const int n = 5;
float mn = 2147483647.00, sum = 0, arr[n];
int idx = 0, el = 0;
 
int main() {
    for (int i = 0; i < n; ++i) {
        arr[i] = -5 + (7 - (-5)) * rand() / (double)RAND_MAX;
        if (fabs(arr[i]) < fabs(mn)) mn = arr[i];
    }
    std::cout << 'n' << mn << 'n';
 
 
    for (int i = 0; i < n; ++i) 
        if ((int)arr[i] == 0) {idx = i; break;}
 
    for (int i = idx + 1; i < n; ++i) sum += abs(arr[i]);
    std::cout << sum << 'n';
 
 
    for (int i = 1; i < n; ++i)
        if (i % 2 == 0) {std::swap(arr[i], arr[el]); ++el;}
 
    return 0;
}

Добавлено через 1 минуту

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

Вот всё вместе:

И тута с выводом, если надо.



0



IT_Exp

Эксперт

87844 / 49110 / 22898

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

Сообщений: 92,604

08.10.2020, 19:59

18

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