Skip to main content

30. Проверки

Теория

задача

с клавиатуры вводится натуральное число n требуется создать массив длины n и заполнить его элементами от n до 1.

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int arr[] = new int[n];
for(int i=0; i<n; i++){
arr[i] = n-i+1;
}
}
}

Для чтения всех элементов массива создана специальная конструкция for-each. Дословно можно перемести как «для каждого».

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

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

for (int a : arr) {
sum += a;
}
System.out.println(sum);

Чтобы использовать for-each конструкцию, надо в скобках указать тип массива, потом имя временной переменной, потом «:», потом имя массива. Каждое выполнение тела цикла производится с новым значением переменной а, равным соответствующему элементу массива.

Теперь возникает вопрос: а что если уже после инициализации массиву присвоить значение второго массива?

int [] arr = {1,2,3,4,5};
int [] arr2 = {6,7,8,9,10};
arr = arr2;

После присвоения arr = arr2 никакого копирования элементов, конечно, не произойдёт, копироваться будет только адрес оперативной памяти, где лежат переменные массива. Поэтому после такого присвоения arr и arr2 будут указывать на одну и ту же структуру данных, а та структура, на которую указывал arr автоматически удалится.

import java.util.Scanner;

public class Main {

public static void main(String[] args) {
int [] arr = {1,2,3,4,5};
int [] arr2 = {6,7,8,9,10};
arr = arr2;
for(int a: arr){
System.out.print(a+" ");
}
arr2[0] = 0;
System.out.println();
for(int a: arr){
System.out.print(a+" ");
}
}
}

Вывод в консоль будет следующий:

6 7 8 9 10
0 7 8 9 10

Рассмотрим задачу

info

Дан массив целых чисел, нужно проверить, все ли его числа положительны.

public class Main {
public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 2, 1};

// логическая переменная, которая отвечает на вопрос,
// все ли числа в массиве положительные
boolean f = true;

// в цикле n раз считываем соответствующие элементы
for (int i = 0; i < arr.length; i++) {
// если i-ый элемент отрицательный
if (arr[i] <= 0)
// меняем ответ на "нет"
f = false;
}

System.out.println(f ? "Да" : "Нет");

}
}

На консоль будет выведено:

НЕТ

Задание

Во всех задачах нужно выполнить ту или иную проверку.

Требуется вывести только ДА или НЕТ.

Массив arr уже объявлен, вам нужно написать только команды, обрабатывающие его значения, т.е. только часть тела метода main().

Например, если вся программа имеет такой код:

public class Main {

public static void main(String[] args) {
int[] arr = new int[]{1, 2, 3, 4, 5, 6, 2, 1};

// логическая переменная, которая отвечает на вопрос,
// все ли числа в массиве положительные
boolean f = true;

// в цикле n раз считываем соответствующие элементы
for (int i = 0; i < arr.length; i++) {
// если i-ый элемент отрицательный
if (arr[i] <= 0){
// меняем ответ на "нет"
f = false;
// прерываем обработку (цикл)
break;
}
}

System.out.println(f ? "Да" : "Нет");

}
}

то в систему тестирования необходимо отправить только

        // логическая переменная, которая отвечает на вопрос,
// все ли числа в массиве положительные
boolean f = true;

// в цикле n раз считываем соответствующие элементы
for (int i = 0; i < arr.length; i++) {
// если i-ый элемент отрицательный
if (arr[i] <= 0){
// меняем ответ на "нет"
f = false;
// прерываем обработку (цикл)
break;
}
}

System.out.println(f ? "Да" : "Нет");
  1. Проверить, что в массиве все элементы положительны
  2. Проверить, что в массиве все элементы не кратные трем и больше нуля.
  3. Проверить, образуют ли его элементы геометрическую прогрессию.
  4. Все ли элементы массива равны друг другу.
  5. Проверить, что массив упорядочен строго по возрастанию (каждый элемент массива больше своего левого соседа).
  6. Верно ли, что на всех четных позициях массива находятся четные числа, а на всех нечетных - нечетные. В этой задаче позиции элементов считать пронумерованными от 11. То есть, элемент массива с индексом 00 - первый элемент массива.
  7. Верно ли, что массив "пилообразный" (каждый элемент массива, кроме первого и последнего, либо больше обоих своих соседей, либо меньше обоих своих соседей)

Ссылка на контест