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> - обобщение для любой перечислимой коллекции.
Код:
using System;namespace ThisAnswerIsNotMine { class Program { private static int a; private static int b; private static int c; private static int d; private static void Main() { int.TryParse(Console.ReadLine()!, out a); int.TryParse(Console.ReadLine()!, out b); int.TryParse(Console.ReadLine()!, out c); int.TryParse(Console.ReadLine()!, out d); Console.WriteLine((a / c) * (b / d) >= (b / c) * (a / d) ? "Широкая" : "Узкая"); } }}
4) ЕС-СВ-ВА=2+8+7=17
5) X=5
Объяснение:
4) Еще можно провести 3 дороги с Е, но они сразу будут большей длины. К 13 нужно будет добавить 3 или 7 - что заведомо больше, к 11 нужно добавить 8 или 7, что тоже заведомо больше. После ЕС можно провести дорогу СD, но она не проходит через В.
5) Можно составить уравнение выполнения команд. Неизвестное число икс значит (2*3+x+x+x)*3=63 и решим его. (6+3х)=63/3 6+3х=21 3х=21-6=15
х=15/3=5 (по условию больше или равно 2).
6) Вторая и третья строки программы говорят о том, что надо ввести с клавиатуры значения s и k. Пока Вы их не введете задача не решается (может быть масса вариантов чисел, которые при сравнении будут давать разные варианты). Например если оба числа или одно из них удовлетворяют условию (больше) программа напечатает "Да". Если s меньше или равно 5 и k меньше или равно 10 программа напечатает "Нет".