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

1 / 1 / 0

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

Сообщений: 36

1

Номер последнего чётного элемента массива, как определить?

04.03.2020, 18:43. Показов 3614. Ответов 11


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

Приветствую, по учёбе проходится тема с массивами, не могу понять, как определить последний чётный элемент в массиве и вывести его индекс, прошу помощи. Спасибо.



0



Programming

Эксперт

94731 / 64177 / 26122

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

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

04.03.2020, 18:43

11

1467 / 1008 / 456

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

Сообщений: 2,793

04.03.2020, 18:46

2

del



0



Diamante

3458 / 2465 / 1170

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

Сообщений: 8,160

04.03.2020, 18:50

3

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

Решение

C#
1
2
3
4
5
6
7
8
9
            var array = new[] { 1, 2, 3, 4, 5 };
            for (int i = array.Length - 1; i >= 0; i--)
            {
                if (array[i] % 2 == 0)
                {
                    Console.WriteLine(i);
                    break;
                }
            }



0



QuakerRUS

1467 / 1008 / 456

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

Сообщений: 2,793

04.03.2020, 18:57

4

C#
1
Console.WriteLine(m.Select((x, i) => (x, i)).Where(x => x.Item1 % 2 == 0).Last().Item2);



0



1 / 1 / 0

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

Сообщений: 36

04.03.2020, 19:08

 [ТС]

5

Diamante, а как в данной ситуации к i добавить ещё одну единицу?



0



Enifan

1842 / 1184 / 501

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

Сообщений: 3,179

04.03.2020, 19:16

6

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

к i добавить ещё одну единицу

C#
1
Console.WriteLine(i + 1);



0



sancez2

1 / 1 / 0

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

Сообщений: 36

04.03.2020, 19:20

 [ТС]

7

При i + 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
28
29
30
31
32
33
34
35
static void Main(string[] args)
        {
            Console.WriteLine("Нажмите любую клавишу для начала выполнения программы.");
            Console.ReadLine();
            Console.Clear();
            Console.Write("Введите количество элементов массива: ");
            int k = Convert.ToInt32(Console.ReadLine());
            int[] N = new int[k];
            Console.WriteLine("Введите элементы: ");
            for (int i = 0; i < k; i++)
            {
                N[i] = Convert.ToInt32(Console.ReadLine());
            }
            Console.WriteLine();
            Console.WriteLine("Массив: ");
            for (int i = 0; i < k; i++)
            {
                Console.Write(" ");
                Console.Write(N[i] + " ");
            }
            Console.WriteLine("");
            Console.WriteLine("");
 
            for (int i = N.Length - 1; i >= 0; i--)
            {
                if (N[i] % 2 == 0)
                {
                    Console.WriteLine(N.Where(x => x % 2 == 0).Last() + "(" + i + 1 + ")");
                    break;
                }
            }
            Console.ReadKey();
        }
    }
}



0



1842 / 1184 / 501

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

Сообщений: 3,179

04.03.2020, 19:42

8

sancez2, не, вы не поняли, вам дали 2 разных кода из 3 и 4 постов, а вы их смешали. Используйте что то одно.



0



1 / 1 / 0

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

Сообщений: 36

04.03.2020, 20:41

 [ТС]

9

Просто первый код выводит сам элемент, а в второй его номер, вот я и подумал. Работает всё правильно, как нужно, в случае, если отсчет в массиве начинается с нуля, без использования i + 1 выводится верный номер, если считать с нуля.

Добавлено через 18 минут
А, всё, я разобрался, всё работает, просто нужно было (i + 1) прописывать в скобках.



0



1467 / 1008 / 456

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

Сообщений: 2,793

04.03.2020, 23:42

10

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

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

Нет, он выдает индекс.

sancez2, если используете мой код, то строки 24-27 и 29-31 лишние.

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

i + 1

Не забывайте, что индексы в C# начинаются с нуля.



0



1 / 1 / 0

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

Сообщений: 36

05.03.2020, 00:17

 [ТС]

11

Я использовал только код из первого сообщения, которое Вы удалили, чтобы вывести сам элемент массива, а потом взял уже другой код от Diamante, т.е. я объединил их. Насчёт элементов массива, я писал о том, что не пойму, как добавить единицу, т.к. нумерация начинается с нуля, она добавлялась просто доп. элементом справа, а потом понял, что i + 1 нужно записать в скобках, так что всё нормально, спасибо) Глядя на косяки, ничего страшного особо нет в этом, эти работы делаются для сдачи на учёбе)



0



1467 / 1008 / 456

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

Сообщений: 2,793

05.03.2020, 00:35

12

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

т.е. я объединил их

Этого не стоило делать, по крайней мере сделали вы это неверно.

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

эти работы делаются для сдачи на учёбе

Ну, если у вас преподаватель принимает некорректные решения, то тогда ладно.



0



I want to find the index of the last element containing an even number in an array, A, with ‘length’ number of elements.
For example, for A = {1, 2, 4, 5, 7} we would return 2 as the value 4 is the last even number and it is at index 2 in the array.
I am required to use a for loop where the fewest number of elements need to be tested, where the first line follows the format:
for ( i = ??; i > ??; i = ??)

I think there’s something wrong with the first line of my code but I don’t know how to fix it.

for ( i = length-1; i >= 0; i =  i-1) { 
if ( A[i] % 2 == 0) { // value mod 2 = 0 indicates even
    return i;
}
error: subscripted value is neither array nor pointer nor vector
     'if (A[i]% 2==0) { // value mod 2 = 0 indicates even'

Gerhardh's user avatar

Gerhardh

10.7k3 gold badges13 silver badges36 bronze badges

asked May 16, 2019 at 7:28

user672518's user avatar

5

Here is how I would write it:

int num = -1;
for ( i = length-1; i > -1; i = i-1) {
  //Check if the array is even
  if( A[i] % 2 == 0 )

    // If it hasn't found an even number yet, automatically set num equal to the index
    // This avoids accessing the element in the "-1" position in the array which would
    //    give an error
    if( num == -1 )
      num = i;

    // If the element at the 'i' position is greater than the previous greatest element
    //   then set num equal to the index
    else if( A[i] > A[num] )
      num = i;
}

// It will return -1 if an even number isn't found
return num;

This will work if A is an array. It sounds like A currently isn’t the array you’re thinking it is; it may be an array of arrays or something similar. If you post the rest of your code it will help to resolve the error.

This answer may help you with your error

answered May 16, 2019 at 12:27

Sam Ventocilla's user avatar

Размещено 3 года назад по предмету
Информатика
от GrandKapital

  1. Ответ на вопрос

    Ответ на вопрос дан
    HappyCoder

    CodePascal

    • const
    •  amax = 100;
    • var
    •  a: array [1..amax] of integer;
    •  i, n, ch, num: integer;
    • begin
    •  Writeln(‘Введите размер массива’);
    •  Readln(n);
    •  ch := 0;
    •  Writeln(‘Исходный массив’);
    •  for i := 1 to n do
    •  begin
    •    a[i] := Random(1, 100);
    •    Write(a[i], ‘  ‘);
    •    if not odd(a[i]) then begin
    •      ch := a[i];
    •      num := i;
    •    end;
    •  end;
    •  Writeln;
    •  writeln(‘Последний четный элемент массива: ‘, ch, ‘[‘, num, ‘]’);
    • end.

    Тестовое решение:

    Введите размер массива

    10

    Исходный массив

    58  50  43  68  74  45  74  20  83  11  

    Последний четный элемент массива: 20[8]

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.

Ответ:

const n=10;

var a:array [1..n] of integer;

   i,s:integer;

begin

   s:=0;

   for i:=1 to n do begin

       write(‘Введите значение ‘,i,’-го элемента массива: ‘); readln(a[i]);

       if a[i] mod 2 = 0 then s:=i;

   end;

   if s = 0 then write(‘В массиве нет чётных чисел’)

   else write(‘Последний чётный элемент массива: ‘, a[s]);

end.

uses crt;
const nmax=100;
var a:array[1..nmax] of integer;
    n,i,i1,ip:integer;
begin
clrscr;
randomize;
repeat
write('Размер массива до ',nmax,' n=');
readln(n);
until n in [1..nmax];
i1:=0;
ip:=0;
writeln('Исходный массив:');
for i:=1 to n do
 begin
  a[i]:=random(50)-25;
  write(a[i]:4);
  if(a[i] mod 2=0)then{если четный}
   begin
    if i1=0 then i1:=i{и еще не было, то первый}
    else ip:=i;{иначе последний}
   end;
 end;
writeln;
if i1=0 then write('В массиве нет четных элементов')
else
 begin
  if ip=0 then ip:=i1;{если второго не нашли, значит последний=первому}
  write('Первый четный a[',i1,']=',a[i1],' последний a[',ip,']=',a[ip]);
 end;
readln
end.

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

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

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

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

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