Максимальный элемент кратный 4

135
02 января 2022, 02:20

Всем привет. В IDEA проходит, но при проверке решения - ошибка. Задача. Дана последовательность натуральных чисел, не превышающая 30000. Найти максимальный элемент, кратный 4. Программа получает количество элементов в последовательности, а затем сами элементы в качестве входных данных. В последовательности всегда присутствует элемент, делимый на 4. Количество элементов не превышает 1000. Программа должна вывести одно число: максимальный элемент последовательности, делимый на 4. Пример ввода:

4 
16 
2 
5
10

Пример вывода:

16
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Scanner;
public class MaximumElementDivisibleBy4 {
  public static void main(String[] args) throws Exception {
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    if (number > 30000) {
      System.out.println("number>30000");
    } else {
      BufferedReader r = new BufferedReader(new InputStreamReader(System.in));
      int[] m = new int[number];
      for (int i = 0; i < m.length; i++) {
        m[i] = Integer.parseInt(r.readLine());
      }
      int max = m[0];
      if (max > 1000) {
        System.out.println("max>1000");
      } else {
        for (int i = 0; i < m.length; i++) {
          if (max < m[i] && m[i] % 4 == 0) {
            max = m[i];
          }
        }
        System.out.println(max);
      }
    }
  }
}
Answer 1

Вы совершенно зря пишете в программе валидацию входных данных. По условию даны данные и они будут правильные. Вам нужно убрать вот эти части:

if (number > 30000) {
 if (max > 1000) {

И массив не нужен.

Основная ошибка в том, что вы неверно построили алгоритм поиска наибольшего по условию. Для поиска максимума нужно корректное начальное значение. В вашем примере вам повезло и оно было первым в последовательности (16). В общем случае надо найти первое нужное число и установить его как начальное значение переменной mMax.

Вот пример кода

int doWeSeeSpecialNumberBefore=0;
      int m,mMax;
      for (int i = 0; i < m.length; i++) {
        m = Integer.parseInt(r.readLine());
        if (m %4==0){
            if (doWeSeeSpecialNumberBefore==0){mMax=m;doWeSeeSpecialNumberBefore=1;}
            else
             if (m>mMax){mMax=m;}
        }
      }

Переменная doWeSeeSpecialNumberBefore это признак того первое ли мы видим число, которое делится на 4 или не первое.

READ ALSO
Защита от ввода множества строк

Защита от ввода множества строк

Пользователь с клавиатуры вводит некую информацию, если она не соответствует заранее заданным критериям, то выводится сообщение об ошибкеПри...

193
Получить имя созданного объекта?

Получить имя созданного объекта?

У меня все созданные объекты идут в список(ArrayList):

172
Нереальный индекс -1

Нереальный индекс -1

В список с клавиатуры пишу стринги, на экран нужно вывести индекс первой стринги которая меньше предыдущей, пример:

184