Linq используется для генерации последовательности
using System.Linq;
Длина последовательности задаётся тут.
private static int Size => 7
Разберём главный код.
По умолчанию Rand имеет большой разброс. Поэтому мы хотим его ограничить, но так, чтобы мы точно не знали значения max и min. (чтобы искать по-честному). Этого можно не делать, но будут страшные значения генерироваться.
Для этого генерируем случайно крайние значения диапазона генерации.
int seedMin = new Random().Next(1, 40);
int seedMax = new Random().Next(seedMin + 5, seedMin + 40);
Далее генерируем саму последовательность.
var arr = Enumerable //Класс из Linq для работы с перечислениями
.Repeat(0, Size) // Задаём количество
.Select(_ => new Random().Next(seedMin, seedMax)) // Для каждого элемента генерируем случайное значение
.ToArray(); // Делаем массивом
Ну а теперь, можно заняться поиском и вычислением.
int max = arr[0], min = arr[0]; // Предполагаем max и min первым элементом
foreach (var el in arr) {
max = Math.Max(el, max); // Если очередной больше - заменяем max
min = Math.Min(el, min); // Если очередной меньше - заменяем min
}
Теперь мы нашли минимальным и максимальный элементы. Нам надо убрать их из последовательности ровно по одному разу. Для этого создаём переменные-флаги типа bool. Если наткнёмся на max или min при расчете, то пропустим их и отметим, что уже встречали.
Создадим переменную для произведения и приравняем к 1 (если 0, то произведение будет 0).
int product = 1;
bool maxIsCatched = false, minIsCatched = false;
Ищем произведение.
foreach (var el in arr)
{
if (!maxIsCatched && el == max) // Если не встречали до этого и встретили сейчас
{
maxIsCatched = true; //Запоминаем факт встречи
continue; // Пропускаем шаг
}
if (!minIsCatched && el == min) // По аналогии но с min
{
minIsCatched = true;
continue;
}
product *= el; // Это всё равно, что написать product = product * el
}
Далее просто выводим результаты.
Сначала выводим сгенерированную последовательность.
Затем найденные max, min и product.
PrintArr(arr);
Console.WriteLine($"Max: {max}; Min: {min}; Product: {product}.");
Метод для печати последовательности написан самостоятельно и выглядит так.
private static void PrintArr<T>(IEnumerable<T> arr)
{
foreach (var el in arr) // Перебираем
{
Console.Write(el); // Печатаем
Console.Write(" ");
}
Console.WriteLine();
}
<T> используется для того, чтобы не зависеть от значений последовательности. Туда можно запихнуть любой массив или список.
IEnumerable<T> - обобщение для любой перечислимой коллекции.
10
Объяснение:
Смотри вложение. Клетки: [B], [S] робот пройдёт более 2-х раз -> эти клетки не подойдут под условие. Почему? Потому что каждый цикл робот смещается на 3 клетки влево – через [B], в каждом цикле, робот уже проходит 2 раза, а в следующем цикле он делает это ещё раз, тем самым проваливая условие для данной клетки; [S] – аналогично, поскольку робот, в каждом цикле, пересечёт данную клетку, выходя из клетки [F] в клетку [G].
Для простоты, приведу список клеток из 2 цикла:
[G] станет [S];
[A] станет [B];
[C] станет [D];
[B] станет [E];
[S] станет [F].
Во втором цикле [G] левее на 3 клетки, а её позицию из 1 цикла, теперь, занимает клетка [S].
Нетрудно понять, что ровно 2 раза робот пройдёт только по клетке [C] – [C] станет [D] и больше не будет пройдена роботом.
Остальные клетки робот пройдёт более или менее 2 раз.
1)
var time: real;
begin
write('введите время забега за 100 метров');
readln(time);
if (time < 8) then writeln('новый мировой рекорд')
else writeln('мировой рекорд не удалось преодолеть');
end.
2)
var x, y: real;
begin
write('введите координаты точки');
readln(x, y);
if (x < 0 and y < 0) then writeln('точка лежит в 3 четверти')
else writeln('точка лежит в другой координатной четверти');
end.