Задача 7: Ремонт забора
Забор состоит из N одинаковых вертикальных досок. Некоторые из досок сгнили и нуждаются в замене, для каждой доски известно, нужно ли её заменить. Для ремонта забора можно использовать продающиеся в магазине щиты, которые бывают L разных видов: шириной в 1 доску, в 2 доски, ..., в L досок. Щит нельзя разрезать на части, то есть одним щитом можно заменить не более любых L подряд идущих досок. При этом можно менять не только сгнившие доски, но и хорошие.
Оказалось, что все щиты стоят одинаково, независимо от размера щита. Определите, какое наименьшее число щитов необходимо приобрести, чтобы починить весь забор.
Входные данные
Первая строка входных данных содержит целое число L (L > 0) – максимальный размер щита. Во второй строке входных данных записано целое число N (N > 0) – количество досок в заборе. Следующие N строк содержат по одному числу, равному 0 или 1. Число 1 обозначает, что соответствующая доска в заборе нуждается в замене, число 0 – что доска может быть сохранена.
Выходные данные
Программа должна вывести одно целое число – минимальное число щитов, которое необходимо приобрести для ремонта всего забора.
Система оценивания
Решение, правильно работающее только для случаев, когда числа L и N не превосходят 1000, будет оцениваться в
В будет оцениваться решение, правильно работающее, когда числа L и N не превосходят 105.
ответ: D) для записи разбросанных по диску файлов на новые места в оптимальной форме
Объяснение: Под дефрагментацией понимается сам процесс собирания отдельных частей в одно отведенное место. При этом происходит сбор разбросанных по винчестеру фрагментов одного файла. Кроме того, все записанные данные оказываются в начале, а свободные ячейки в конце диска. Это позволяет:
ускорить доступ к данным;
быстрее загрузить программы и файлы;
повысить быстродействие в ресурсоемких программах;
увеличить скорость записи на диск.
Возможно 2 варианта:
Первый:
int chislo;
double result;
Console.Write("Введите число, корень которого необходимо найти: ");
chislo = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
result = Math.Sqrt(chislo);
Console.Write("Корень из числа " + chislo + " равен " + result);
Console.ReadKey();
Второй:
int chislo;
double result;
Console.Write("Введите число, корень которого необходимо найти: ");
chislo = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();
result = Math.Pow(chislo, 1.0/2.0);
Console.Write("Корень из числа " + chislo + " равен " + result);
Console.ReadKey();
Объяснение:
Алгоритм на C#.
В первом варианте мы напрямую вызываем функцию корня Sqrt(), а во втором, следуя правилам математики, возводим число в степень 1/2, что идентично корню от этого числа. В обоих случаях результат один и тот же.