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

Перейти к содержанию

Определить индексы четных элементов массива

Просмотров 3.1к. Обновлено 15 октября 2021

Во втором массиве сохранить индексы четных элементов первого массива. Например, если дан массив со значениями 8, 3, 15, 6, 4, 2, то второй массив надо заполнить значениями 1, 4, 5, 6 (или 0, 3, 4, 5 — если индексация начинается с нуля), т.к. именно в этих позициях первого массива стоят четные числа.

  1. Ввести для второго массива счетчик элементов.
  2. В цикле перебирая все элементы первого массива,
    1. проверять их на четность.
    2. Если элемент четный, то
      1. заносить его индекс в очередную ячейку второго массива,
      2. увеличивать на 1 значение счетчика элементов второго массива.
  3. Вывести на экран элементы второго массива от первого до последнего, на индекс которого указывает счетчик элементов второго массива (чаще за вычетом 1).

Pascal


const N = 15;
var
arr, even: array[1..N] of integer;
i, j: byte;
begin
randomize;
for i:=1 to N do begin
arr[i] := random(11);
write(arr[i]:4)
end;
writeln;

j := 0;
for i:=1 to N do
if arr[i] mod 2 = 0 then begin
j := j+1;
even[j] := i;
end;

write('Индексы четных элементов: ');
for i:=1 to j do
write(even[i], ' ');
writeln;
end.



5 2 6 10 7 7 3 7 10 2 1 9 1 1 1
Индексы четных элементов: 2 3 4 9 10

Язык Си


#include < stdio.h>
#define N 10
main() {
int arr[N], even[N], i, j;
srand(time(NULL));
for (i=0; i< N; i++) {
arr[i] = rand()%11+10;
printf("%d ", arr[i]);
}
printf("n");
j = 0;
for (i=0; i< N; i++)
if (arr[i] % 2 == 0) {
even[j] = i;
j += 1;
}
printf("Индексы четных элементов: ");
for (i=0; i< j; i++)
printf("%d ", even[i]);
printf("n");
}



14 17 13 20 20 18 11 12 12 11
Индексы четных элементов: 0 3 4 5 7 8

Python

четные индексы python


from random import randint
N = 5

arr = [0] * N
even = []

for i in range(N):
arr[i] = randint(10, 19)
if arr[i] % 2 == 0:
even.append(i)

print(arr)
print('Индексы четных элементов: ', even)



[14, 18, 11, 15, 16]
Индексы четных элементов: [0, 1, 4]

КуМир


алг индексы четных элементов
нач
цел N = 15
цел таб arr[1:N], even[1:N]
цел i,j
нц для i от 1 до N
arr[i] := int(rand(0,11))
вывод arr[i], " "
кц
вывод нс
j := 0
нц для i от 1 до N
если mod(arr[i],2) = 0 то
j := j + 1
even[j] := i
все
кц
вывод "Индексы четных элементов: "
нц для i от 1 до j
вывод even[i], " "
кц
кон



7 5 8 4 2 0 2 7 4 10 9 4 0 6 6
Индексы четных элементов: 3 4 5 6 7 9 10 12 13 14 15

Basic-256


N = 10
dim arr(N)
dim even(N)
for i=0 to N-1
arr[i] = int(rand *10) + 10
print arr[i] + " ";
next i
print
j = 0
for i=0 to N-1
if arr[i] % 2 = 0 then
even[j] = i
j = j + 1
endif
next i
print "Индексы четных элементов: "
for i=0 to j-1
print even[i] + " ";
next i



10 13 18 19 17 16 12 12 18 10
Индексы четных элементов:
0 2 5 6 7 8 9

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

Написал программу которая выводит элементы массива с ЧЕТНЫМИ индексами.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(){
    int mass[50];
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cout<<"["<<i<<"]";
        cin>>mass[i];
    }
    for(int i=1;i<n;i++){
        if(i%2==0){
            cout<<mass[i]<<" ";}
    }
   getch();
    return 0;
}

В задании сказано вывести элементы массива именно с Четными индексами, тоесть 2,4,6 и т.д. Вопрос: Правильно ли я написал во втором цикле i=1, потому что когда я ставлю 0, выводит в результат элемент с индексом 0, ведь подсчет начинается с 0. Я запутался…

Добавлено через 20 минут
Так выводит элементы именно с четными индексами. Я увеличил значение индекса на 1, чтобы начинался не с 0. Так верно?

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int main(){
    int mass[50];
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cout<<"["<<i+1<<"]";
        cin>>mass[i];
    }
    for(int i=0;i<n;i++){
        if(i%2!=0){
            cout<<mass[i]<<" ";}
    }
   getch();
    return 0;
}

Добавлено через 13 минут
Хотя 0 это же тоже четное число, тогда

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <math.h>
#include <ctime>
using namespace std;
int main(){
    int mass[50];
    int n;
    cin>>n;
    for(int i=0;i<n;i++){
        cout<<"["<<i<<"]";
        cin>>mass[i];
    }
    for(int i=0;i<n;i++){
        if(i%2==0){
            cout<<mass[i]<<" ";}
    }
   getch();
    return 0;
}

так верно. Помогите, я схожу с ума. Легкое задание, а я где-то мозги потерял..

I am working on an assignment in which I must fill a two dimensional array row by row. If the row’s index value is even (0, 2, 4, etc..) the row must fill from right to left. If the row’s index value is uneven (1, 3, 5, etc…), then it must fill from left to right. What condition should I put in my if statement in order for the filling of rows to alternate in this way?

Thanks!

asked Nov 29, 2016 at 19:08

Gabbie's user avatar

2

You need to use the modulo or remainder operation. Suppose i is an uneven number, therefore i%2 will evaluate to 1. For even numbers i%2 will result in 0. As pointed out in the comment, use the condition
if (row_index % 2 == 0) {*do right to left thing*} else {do right to left thing}.

answered Nov 29, 2016 at 19:20

Luiz Carlos Ciafrino Neto's user avatar

As the user with the weird name that i have no idea how to reference (sorry, feel free to edit your name in here) pointed out, i%2==0 should solve the problem.

The % (modulo) operator returns the remainder of the integer division, so if the row number is even you can divide it by 2 and have no remainder (i%2==0)

int[][] toBeFilled = new int[width][height];
for(int i=0;i<width;i++) {
    if(i%2==0)
        //Fill toBeFilled[i] from Right to Left
    else
        //Fill toBeFilled[i] from from Left to Right
}

answered Nov 29, 2016 at 19:24

7H3_H4CK3R's user avatar

Here’s a code sample that may help. Note that this is C# (I’m not sitting in front of a Java compiler right now) so there are some very minor syntax differences but it should still be pretty readable.

    private static int[][] BuildArrays()
    {
        Random random = new Random();

        // Whatever size you want
        int[][] array = new int[random.Next(1, 100)][];

        for (int i = 0; i < array.Length; i++)
        {
            // Make an array of whatever size you want
            array[i] = new int[random.Next(1, 50)];

            // % is the modulo operator
            // Basically, this means "remainder when the index is divided by 2"
            // By definition, even numbers are evenly divisible by 2 and odd numbers aren't
            if (i % 2 == 0)
            {
                // Even - we fill right to left
                for (int j = array[i].Length - 1; j >= 0; j--)
                {
                    // Enter whatever you want
                    array[i][j] = random.Next();
                }
            }
            else
            {
                // Odd - we fill left to right
                for (int j = 0; j < array[i].Length; j++)
                {
                    array[i][j] = random.Next();
                }
            }
        }

        return array;
    }

answered Nov 29, 2016 at 19:25

EJoshuaS - Stand with Ukraine's user avatar

K = [1, 2, 6, 77, 18, 24, 45, 67, 111, 134, 667, 345]

for el in range(0,len(K)):
    if el % 2 == 0:
        print(el)
    else:
        continue

как вывести именно числа с четными индексами?

Alex's user avatar

Alex

6,4786 золотых знаков23 серебряных знака31 бронзовый знак

задан 9 мар 2019 в 15:16

Светлана Зотова's user avatar

4

как вывести именно числа с четными индексами?

K = [1, 2, 6, 77, 18, 24, 45, 67, 111, 134, 667, 345]

for el in range(0,len(K)):
    if el % 2 == 0:
        print(K[el])
    else:
        continue

Результат:

1
6
18
45
111
667

Тест

ответ дан 9 мар 2019 в 18:47

Alex's user avatar

AlexAlex

6,4786 золотых знаков23 серебряных знака31 бронзовый знак

>>> a = [1, 2, 3, 4, 5, 6, 7, 8]
>>> b = [x for x in a if not x%2]#четные значения из массива
>>> b
[2, 4, 6, 8]
>>> b = [v for k,v in enumerate(a) if not k%2]#четные значения ключей из массива
>>> b
[1, 3, 5, 7]
>>> 
>>> list(enumerate(a)) #чтобы понимать как это работает
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8)]
>>>

Мне кажется решать задачки нужно самому. Но вы почитайте про генераторы массивов.

В обоих случаях использован условный генератор — добавляет элемент если соблюдается условие. Условие это остаток от деления на 2 — если равен нулю то число четное. Инверсия чтобы четные результаты давали True(1) вместо False(0).
Функция enumerate() — очень полезная когда надо получить и элемент массива и его порядковый номер в массиве(ключ).
P.S. Кстати 0 это четный индекс по вашему или нет?

Понравилась статья? Поделить с друзьями:
  • Как найти силу трения формула 7 класс
  • Нуклоны это в химии как найти
  • Как найти советские деньги
  • Как найти по фамилии историю человека
  • Cannot import dll utf8 как исправить в wine linux