Triangle Quest | Way23

Triangle Quest

Разберём две математические задачи с Hackerrank: Triangle Questopen in new window и Triangle Quest 2open in new window.

Дано число от 1 до 9 и нужно вывести треугольники из чисел заданного вида. Для числа 4 в первой задаче:

1
22
333
4444
1
2
3
4

а во второй:

1
121
12321
1234321
123454321
1
2
3
4
5

Для вывода допустимо использовать только один цикл, процедуру print и математические операции:

for i in range(1,int(input())):
    print # можно менять только эту строку
1
2

Чтобы решить эти задачи, нужно научится генерировать строку треугольника по её номеру.

Количество цифр в строке треугольника пропорционально номеру строки. Возводя 10 в степень мы получаем число с заданным количество цифр. Но степень 10 нам не подходит, вот если бы можно было сгенерировать число заданной длины состоящее из единиц, то умножив его на номер строки мы бы получили требуемую строку.

Каким образом можно получить из числа 100 число 11? Из 100 вычитаем единицу и получаем 99, остаётся только поделить 99 на 9. Этот способ позволяет генерировать числа состоящие из единиц заданной длины.

Осталось собрать всё вместе:

Формулаi = 4
10 ** i10 ** 4 = 10000
10 ** i - 110000 - 1 = 9999
(10 ** i - 1) // 99999 // 9 = 1111
((10 ** i - 1) // 9) * i1111 * 4 = 4444

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

После решения первой, вторая задача решается совсем просто. Достаточно заметить закономерность умножения чисел состоящих из единиц на самих себя:

  • 11 * 11 = 121
  • 111 * 111 = 12321
  • 1111 * 1111 = 1234321

Решение на Python:

n = int(input())

for i in range(1, n):
    print((10 ** i - 1) // 9 * i)

print('')

for i in range(1, n + 1):
    print(((10 ** i - 1) // 9) ** 2)
1
2
3
4
5
6
7
8
9
Последниее изменение: 31.08.2021, 15:52:51