Решение задач по программированию #1

Олдфаг
Статус
Оффлайн
Регистрация
18 Фев 2019
Сообщения
2,826
Реакции[?]
1,853
Поинты[?]
24K
Всем привет! Недавно я создал тему для ваших идей по контенту раздела "Расширенное программирование" стоящих идей так и не поступило, но один мой друг попросил помочь с решением нескольких олимпиадных задач по информатике (в поддерживаемых языках не было Delphi, который является его основным яп). И я решил, что буду регулярно выкладывать решения предложенных вами задач (задачи можно присылать в тему под личный хайд), но, поскольку я решил лишь задачи друга, выложу их.

1. Ночные заморозки

Условие

Метеорологическая станция ведет наблюдения за температурой воздуха. Синоптиков интересует, сколько дней длилась самая продолжительная оттепель. Оттепелью они называют период, в который среднесуточная температура ежедневно превышала 0 градусов Цельсия.
Напишите программу, помогающую синоптикам в работе.

Формат входных данных
Во входном файле сначала записано число N – общее количество рассматриваемых дней (1 ≤ N ≤ 100). В следующей строке через пробел располагается N целых чисел, разделенных пробелами. Каждое число – среднесуточная температура в соответствующий день. Температуры – целые числа и лежат диапазоне от -50 до 50.

Формат выходных данный
В выходной файл требуется вывести одно число – длину самой продолжительной оттепели, то есть наибольшее количество последовательных дней, на протяжении которых среднесуточная температура превышала 0 градусов. Если температура в каждый из дней была неположительной, выведите 0.

Решение (С#)
Код:
static void Main(string[] args)
{  
    string N = Console.ReadLine(); // Получаем количество исследуемых дней. Честно говоря, я не знаю, зачем в условии нужна эта переменная
    String[] EachDay = Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Делим следующую строку на массив EachDay, разделяя пробелами
    int Max = 0; // Переменная итогового количества повторяющихся дней
    int Max1 = 0; // Переменная промежуточного количества дней

    for (int i = 0; i < EachDay.Length; i++) // Цикл с перебором всех элементов массива
    {
        if (Convert.ToInt32(EachDay[i]) > 0) // Увеличение Max1 на единицу при температуре больше 0 градусов
            Max1++;

        else // Если температура меньше нуля или 0, то заносим значение Max1 в Max (если Max < Max1) и сбрасываем значение Max
        {
            if (Max < Max1)
            {
                Max = Max1;
                Max1 = 0;
            }
        }

        if(i == (EachDay.Length - 1)) // Проверка на перебор последнего символа (если температура каждого дня будет > 0)
            Max = Max1;
    }
       
    Console.WriteLine("\n"); // Делаем отступ в одну строку, чтобы все числа не сливались
    Console.WriteLine(Max); // Выводим ответ
    Console.ReadKey(); // Считываем нажатие любой клавиши, чтобы консоль не закрывалась
}

2. Числа Цукермана

Условие
Число Цукамерна - натуральное число, которое делится на произведение своих цифр, например 175 делится на 1*7*5=35.
Составить программу, которая выводит на экран все трёхзначные числа Цукамерна.


Формат входных данных
Входной файл содержит натуральное число N, N <= 1000

Формат выходных данных
Выходной файл содержит строку чисел через пробел

Решение (C#)
Код:
static void Main(string[] args)
{  
    string N = Console.ReadLine(); // Считываем ненужную переменную, обязательную в условии
    int Num = 100; // Первое трехзначное число, с которого мы начинаем отсчет
    string Nums = ""; // Переменная со всеми итоговыми числами
   
    for (; Num < 1000; Num++) // Перебираем все трехзначные числа
    {
        int E = Num % 10; // Находим количество единиц в числе
        int D = ((Num % 100) - E) // Находим количество десятков
        int S = Num / 100 // Находим количество сотен
        int EDS = E*D*S // Находим произведение всех цифр
       
        if (EDS != 0) // Проверка на деление числа Num на 0
            continue;
           
        if (Num % EDS == 0) // Итоговое сравнение
            Nums += (Num + " ");
    }
   
    Console.WriteLine(Nums); // Вывод итогового результата
    Console.ReadKey(); // Чтобы консоль не закрывалась (Аналог System("pause"))
}

3. Кормушка

Условие
К кормушке прилетели воробьи, синицы, снегири и вороны. Мальчик посчитал количество птиц каждого вида.
Напишите программу, которая запрашивает четыре числа – количество птиц каждого вида, а затем сообщает общее число птиц у кормушки, дописывая к числовому значению слово «птица» в правильной форме. Например, 33 птицы, 11 птиц, 21 птица.


Входные данные
Входной файл содержит 4 натуральных числа А,В,C,D ( А,В,С,D <=100).

Выходные данные
Выходной файл содержит сумму переменных А,В,C,D и слово «птица» с согласованным окончанием.

Решение (C#)
Код:
static void Main(string[] args)
{  
    String[] EachBird =  Console.ReadLine().Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); // Считываем количество каждых птиц
    int Birds = EachBird[0] + EachBird[1] + EachBird[2] + EachBird[3]; // Складываем их и заносим в переменную Birds
    string  Word = "птиц"; // Создаем переменную для согласования окончания слова
   
    switch(Birds % 10) // Создаем switch для значений последней цифры Birds
    {
        case 1:
            Word += "а";
            break;
        case 2: // Case для значений от 2 до 4
        case 3:
        case 4:
            Word += "ы";
    }
   
    Console.WriteLine(Birds + " " + Word); // Выводим итоговый ответ
    Console.ReadKey(); // Чтобы окно не закрывалось
}

4. Домашнее задание

Условие

Ученик, выполняя письменное домашнее задание по английскому языку, комментирует его. Записывая в тетрадь слова строчными буквами, он произносит фразу "уже встречалась" каждый раз, когда пишет букву, которая уже встречалась в слове раньше.
Составьте программу, которая определяет, длину слова и сколько раз ученик произнесет фразу "уже встречалась" .

Формат входных данных
Во входном файле записано слово латинскими строчными буквами, длина которого не превышает 255 символов.

Формат выходных данных
В выходной файл в первой строке выводится длина слова. Во второй строке - число повторяющихся букв.


Решение (C#)
Код:
static void Main(string[] args)
{  
    string Word = Console.ReadLine(); // Получаем входное слово
    int Symbols = Word.Length; // Находим длину слова
    int Repeat = 0; // Переменная с количеством повторяющихся символов
   
    for (int i = 0; i < Symbols; i++) // Перебираем все индексы символов Word для переменной i
    {
        for (int j = 1; j < Symbols; j++) // Перебираем индексы символов Word уже для переменной j
        {
            if (Word[i] == Word[j]) // Сравнение символов c переменными i и j. При их равенстве, увеличиваем Repeat
                Repeat++;
        }
    }
   
    Console.WriteLine(Symbols + "\n" + Repeat); // Вывод итогового результата
    Console.ReadKey(); // Оставляем консоль открытой
}


Предложить задачу для решения можно в теме под личный хайд или же в личные сообщения на форуме/ВК
Тема для идей по "Расширенному программированию" : https://yougame.biz/threads/103295/
 
Последнее редактирование:
AL lib: (EE) alc_cleanup: 1 device not closed
Участник
Статус
Оффлайн
Регистрация
5 Май 2019
Сообщения
915
Реакции[?]
200
Поинты[?]
1K
Сори за ап темы, но смысл в этой теме, если есть codewars.com ( noad )?
 
Сверху Снизу