mix42
09.12.2022 05:17

Создать динамический и статистический веб сайт

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
Dobrota2017
13.10.2022 11:27

Задачка мне очень понравилась, прилагаю решение на 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);

       }

   }

}

0,0(0 оценок)
Ответ:
nellit03
20.04.2020 22:31

Python – высокоуровневый язык программирования, акцентирующий внимание на удобочитаемости. Он разрабатывается, поддерживается и часто используется в соответствии с The Zen of Python или PEP 20.

В этой статье показано несколько примеров хороших и плохих методов кодинга в Python, с которыми вы, вероятно, столкнетесь.

Использование распаковки (Unpacking) для написания компактного кода

Упаковка и распаковка — мощные инструменты Python. Вы можете использовать распаковку для присваивания значений переменным:

>>> a, b = 2, 'my-string'

>>> a

2

>>> b

'my-string'

Вы можете использовать это для написания, возможно, самого компактного кода, меняющего значения переменных местами

>>> a, b = b, a

>>> a

'my-string'

>>> b

2

Это потрясающе!

Распаковка также может быть использована для присвоения значения нескольким переменным в более сложных случаях. Например, Вы можете написать так:

>>> x = (1, 2, 4, 8, 16)

>>> a = x[0]

>>> b = x[1]

>>> c = x[2]

>>> d = x[3]

>>> e = x[4]

>>> a, b, c, d, e

(1, 2, 4, 8, 16)

Но вместо этого Вы также можете воспользоваться более лаконичным и, возможно, более читабельным

>>> a, b, c, d, e = x

>>> a, b, c, d, e

(1, 2, 4, 8, 16)

Это круто, правда? Но можно написать еще круче:

>>> a, *y, e = x

>>> a, e, y

(1, 16, [2, 4, 8])

Фишка в том, что переменная с * собирает значения, не назначенные другим переменным.

Использование цепочки (Chaining) для написания компактного кода

Python позволяет использовать цепочки операторов сравнения. Таким образом, Вам не нужно проверять, являются ли два или более сравнения истинными:

>>> x = 4

>>> x >= 2 and x <= 8

True

Вместо этого Вы можете использовать более компактную форму написания:

>>> 2 <= x <= 8

True

>>> 2 <= x <= 3

False

Python также поддерживает присваивание значений переменным в виде цепочки. Итак, если Вы хотите присвоить одно и то же значение нескольким переменным одновременно, Вы можете сделать это простым

>>> x = 2

>>> y = 2

>>> z = 2

Более компактный использовать распаковку:

>>> x, y, z = 2, 2, 2

Тем не менее, все выглядит ещё круче, если использовать присвоение значения цепочкой:

>>> x = y = z = 2

>>> x, y, z

(2, 2, 2)

Будьте осторожны, когда значения разные! Все переменные ссылаются на одно и то же значение.

Проверка на None

None не является уникальным объектом в Python. Он имеет аналоги, например, null в C-подобных языках.

Можно проверить, ссылается ли переменная на None с операторов сравнения == и !=:

>>> x, y = 2, None

>>> x == None

False

>>> y == None

True

>>> x != None

True

>>> y != None

False

Однако, предпочтительнее использование is и is not:

>>> x is None

False

>>> y is None

True

>>> x is not None

True

>>> y is not None

False

Кроме того, лучше использовать конструкцию x is not None, а не менее читабельную альтернативу (x is None).

Перебор последовательностей (Sequences) и отображений (Mappings)

Вы можете реализовать циклы в Python несколькими предлагает несколько встроенных классов для упрощения их реализации.

Почти всегда Вы можете использовать диапазон, чтобы получить цикл, который выдает целые числа:

>>> x = [1, 2, 4, 8, 16]

>>> for i in range(len(x)):

...     print(x[i])

...  

1

2

4

8

16

Однако для этого есть лучший

>>> for item in x:

...     print(item)

...  

1

2

4

8

16

Но что, если Вы хотите запустить цикл в обратном порядке? Конечно, снова можно использовать диапазон:

>>> for i in range(len(x)-1, -1, -1):

...     print(x[i])

...  

16

8

4

2

1

Объяснение:

Люди его учат веками а ты за минуту хочешь выучить. Это просто краткий курс

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота