Головоломка “Ханойские башни” состоит из трех стержней, пронумерованных числами 1, 2, 3. На стержень 1 надета пирамидка из n дисков различного диаметра в порядке возрастания диаметра. Диски можно перекладывать с одного стержня на другой по одному, при этом диск нельзя класть на диск меньшего диаметра. Необходимо переложить всю пирамидку со стержня 1 на стержень 3 за минимальное число перекладываний.
Напишите программу, которая решает головоломку; для данного числа дисков n печатает последовательность перекладываний в формате a b c, где a — номер перекладываемого диска, b — номер стержня с которого снимается данный диск, c — номер стержня на который надевается данный диск.
Например, строка 1 2 3 означает перемещение диска номер 1 со стержня 2 на стержень 3. В одной строке печатается одна команда. Диски пронумерованы числами от 1 до n в порядке возрастания диаметров.
Программа должна вывести минимальный (по количеству произведенных операций перекладывания пирамидки из данного числа дисков.
На питоне
Привет, код ниже, для справки по функциям советую посетить MSDN.
Если остаются вопросы так же есть хороший сайт как METANIT, там ты можешь найти простые примеры и простую документацию.
Если хочется проверить работаю кода, то есть прекрасный ресурс как Repl It.
Если есть вопросы, пиши в комментариях. За дополнительной информацией пиши в ЛС.
за отметку "Лучшее решение" и нажатую кнопочку и у меня в профиле.
Так же в моем профиле вы можете найти полезные ссылки на ресурсы описанные выше.
using System;
class MainClass {
public static int (int[] array)
{
int result = 1;
foreach (int element in array)
{
if (0 > element)
{
result *= element;
}
}
return result;
}
static void Main()
{
Console.WriteLine("Please, enter length of array: ");
int sizeOfArray = Convert.ToInt32(Console.ReadLine());
int[] array = new int[sizeOfArray];
for (int i = 0; i < sizeOfArray; ++i)
{
Console.WriteLine("Please, enter array entry: ");
array[i] = Convert.ToInt32(Console.ReadLine());
}
int productOfNegativeNumbers = (array);
Console.WriteLine("Product of negative numbers is: {0}", productOfNegativeNumbers);
}
}
70, 35, 43, 132, 121, 11, 60, 64, 24, 31
Объяснение:
1) Изначально s = 0, затем на каждой из 12 – 6 + 1 = 7 итераций к ней прибавляется 10, итого получится 70
2) Аналогично, s = 0 + 7 * (8 – 3) = 35
3) Итерация с i = 1: k = 2 * 4 + 1 = 9. Итерация с i = 2: k = 2 * 9 + 2 = 20. Итерация с i = 3: k = 2 * 20 + 3 = 43.
4) s = 0 + 12 * 11 = 132
5) s = 0 + 11 * (12 – 1) = 121
6) u = 26 – 1 – 2 – 3 – 4 – 5 = 11
7) s = 4 + 5 + … + 11 = 60
8) s = 1 * 2 * 2 * … * 2 (8 – 3 + 1 раз) = 64
9) y = 0 + 4 * 1 + 4 * 2 + 4 * 3 = 24
10) s = 3 + 2 * 2 + 2 * 3 + 2 * 4 + 2 * 5 = 31