Занятие 5. Справочник

Сайт: Информатикс
Курс: Фирма "1С". "Алгоритмы. Олимпиадное программирование на языке Java для школьников"
Книга: Занятие 5. Справочник
Напечатано:: Гость
Дата: Пятница, 18 Июль 2025, 07:59

Занятие 5. Справочник

Чтение последовательности, дано количество элементов

int N = in.nextInt(); //чтение количества элементов
for (int i = 0; i < N; i++)
{
	int t = in.nextInt();
	//...здесь немедленная обработка t
}

Чтение последовательности до нуля

int t = in.nextInt();

for (t != 0) //проверка на ограничитель
{
	//...здесь немедленная обработка t
	int t = in.nextInt();
}
Могут быть и более сложные ограничители. Например, два нуля подряд. Эта задача давалась в первом занятии. Решение можно посмотреть в разборе.

Сумма элементов

Заведем переменную s, проинициализируем ее нулем. И будем добавлять к ней очередной элемент:
int N = in.nextInt(); //чтение количества элементов
int s = 0;
for (int i = 0; i < N; i++)
{
	int t = in.nextInt();
	s += t;
}
(здесь и далее мы будем иллюстрировать все первым способом чтения)

Максимум из всех

int N = in.nextInt(); //чтение количества элементов
int max = in.nextInt();
for (int i = 0; i < N; i++)
{
	int t = in.nextInt();
	if (t > max) max = t;
}

Максимум из четных двумя циклами

int N = in.nextInt(); //чтение количества элементов
int max = in.nextInt();
int i = 0;
while (max % 2 != 0)
{
	max = in.nextInt();
	i++;
}// на выходе из этого цикла в max первое четное число
for (; i < N; i++)//начальные условия цикла можно не указывать
{
	int t = in.nextInt();
	if (t % 2 == 0 && t > max) max = t; //только среди четных!
}

Второй максимум с повторениями

int N = in.nextInt(); //чтение количества элементов
int max1 = in.nextInt();
int max2 = in.nextInt();
if (max1 < max2) //упорядочиваем
{
	int t = max1;
	max1 = max2
	max2 = t;
}
for (int i = 0; i < N - 2; i++){
	int t = in.nextInt();
	if (t > max1) //”проталкиваем”
	{
		max2 = max1;
		max1 = t
	}
	else if (t > max2) //просто меняем max2
	{
		max2 = t;
	}
}

Второй максимум без повторений

int N = in.nextInt(); //чтение количества элементов
int max1 = in.nextInt();
int max2 = in.nextInt();
int k = 2;//счетчик прочитанных элементов до основного цикла
while(max2 == max1)
{
	max2 = in.nextInt();
	k++;
}
if (max1 < max2) //упорядочиваем
{
	int t = max1;
	max1 = max2
	max2 = t;
}
for (int i = 0; i < N - k; i++){
	int t = in.nextInt();
	if (t > max1) //”проталкиваем”
	{
		max2 = max1;
		max1 = t
	}
	else if (t > max2 && t != max1) //просто меняем max2
	{
		max2 = t;
	}
}