Вагифович
?>

Расскажите о своём личном опыте участия в форумах и тестирующих системах.

Информатика

Ответы

Мария1414

Задачка мне очень понравилась, прилагаю решение на C#, консольное приложение

Объяснение:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

namespace Археологи_строители

{ class Program

   {

       static void Main(string[] args)

       {

           //Объявляем и задаем переменные "M" и "N", а так же переменную для результата

           int M,N=new int();

           int MyResult = 0;

           Console.WriteLine("Ведите Текущее количество ступенек и Сколько их должно быть:");

           M = int.Parse(Console.ReadLine());

           N = int.Parse(Console.ReadLine());

           // Создаем массив для хранения данных о ступенях. M-Количество ступенек, Цифра - для колонок длины и высоты

           int[,] mass = new int[M,2];

           // Запись значений в массив

           for (int x = 0; x < M; x++){

               for (int y = 0; y < 2; y++){

                   if (y==0){  //Чисто для юзерфрендли отображения

                       Console.Write($"Введите значение Длины для ступеньки №{x + 1}= ");} else{

                       Console.Write($"Введите значение Высоты для ступеньки №{x + 1}= ");}

                   mass[x, y] = Convert.ToInt32(Console.ReadLine());}

                   Console.WriteLine();}

           /* Как оказалось, самый простой определить какую же ступеньку надо "поднимать"-

            * это вычислить площадь гипотетически "заполняемого" пространства над ступенькой и взять

            * наименьшее значение.

            *  

            * Итак, допустим если у нас 5 ступенек, то нам нам необходимо записать 4 значения

            * (в рамках лестницы) площади заполняемых ступенек.

            *  

            * Перемножаем Длину ступеньки N на высоту ступеньки N+1, M-1 раз и сохраняем в массив

            */

           int M2 = M; //Дублируем изначальное число ступенек для контроля цикла

           for (int z = 0; z <M2-N; z++)

           {

               int[] acreage = new int[M - 1];

               for (int x = 0; x < M - 1; x++)

               {

                   for (int y = 0; y < 2; y++)

                   {

                       acreage[x] = mass[x, 0] * mass[x + 1, 1];

                   }

               }

               /*

                * И так у нас есть все значения гипотетически заполняемой ступеньки.

                * Ищем минимальное значение площади  

                */

               int minAcreage = acreage[0];

               for (int i = 0; i < M - 1; i++)

               {

                   if (minAcreage > acreage[i])

                   {

                       minAcreage = acreage[i];

                   }

               }

               MyResult = MyResult+minAcreage; //Плюсуем данное значение в переменную результата

               // У нас есть минимальная площадь. Найдем номер данной ступеньки

               int IndexAcreage = Array.IndexOf(acreage, minAcreage);

               //"Достроим нужную нам ступеньку и запишем обновленные данные во временный массив"

               int[,] tempMass = new int[M - 1, 2]; //Он на размер меньше, т.к. и "полных" ступенек у нас стало меньше

               for (int x = 0; x < M - 1; x++)

               {

                   for (int y = 0; y < 2; y++)

                   {

                       //Ступеньки до IndexAcreage мы просто переписываем во временный массив

                       if (x < IndexAcreage)

                       {

                           tempMass[x, y] = mass[x, y];

                       }

                       //2 ступеньки от IndexAcreage мы превращаем в одну (застраивая их блоками)

                       else if (x == IndexAcreage)

                       {

                           tempMass[x, y] = mass[x, y] + mass[x + 1, y];

                       }

                       /* и после IndexAcreage мы та же копируем, но со сдвигом вправо, т.к. полноценных  

                        * ступенек стало меньше

                        */

                       else if (x > IndexAcreage)

                       {

                           tempMass[x, y] = mass[x + 1, y];

                       }

                   }

               }

               M = M - 1; //Поскольку ступенек теперь меньше, то и их фактическое число необходимо уменьшить

               for (int x = 0; x < M + 1; x++)

               {

                   for (int y = 0; y < 2; y++)

                   {

                       mass[x, y] = 0;

                   }

               }

               //переписываем данные в основной массив и запускаем следющую интерацию цикла

               for (int x = 0; x < M; x++)

               {

                   for (int y = 0; y < 2; y++)

                   {

                       mass[x, y] = tempMass[x, y];

                   }

               }

           }

           Console.WriteLine($"Минимально необходимое число блоков: {MyResult}");

           Console.ReadKey(true);

       }

   }

}

fab2004
Txt – первый формат для текстовых файлов, в котором не используется форматирование (размер шрифта, полужирный, отступ абзаца и пр,). Содержит только текст.
.doc – формат, который использовался долгое время в текстовом редакторе Word компании Microsoft. Наиболее распространенный для текстовых редакторов.
.docx – формат для текстового редактора Word компании Microsoft, который появился в пакете Microsoft office 07 (2007 год) и имеется в Office 10. Не все редакторы поддерживают данный формат, так как эта лицензионная разработка компании Microsoft.
.odt – формат для текстового редактора Write пакета свободный офис (OpenOffice).
.rtf – формат для текстового редактора, имеющий возможность использоваться в разных операционных системах, то есть, можно переносить с компьютера, имеющего одну операционную систему на другой компьютер с другой операционной системой.
.pdf – формат для текстового файла, разработанных компанией Adobe. Имеется меньшие размеры и лучше передает рисунки по сравнению с другими форматами. Когда он был разработан, то редактор для создания подобных файлов нужно было купить у компании Adobe. В то же время для любого пользователя можно было скачать просмотровщик данного файла. Многие компании делали текстовую информацию именно в этом формате, поэтому он стал популярен.
.chm – формат файла, который используется для хранения нескольких файлов формата html. Создан для замены формата справочной системы. Может иметь ссылки, по которым возможен переход на другую страницу.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Расскажите о своём личном опыте участия в форумах и тестирующих системах.
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

grenysherg2873
Aleksei1968
adrinalin991
Avolohova
Сумарокова
sawa-msk
steger
Yekaterina_Popova1413
elav20134518
socofilesrus4
Алексей424
karpachevamarina
emartynova25
LesnovaVeronika1830
oloinics