Розбираємо задачу з 8545 з e-olimp під назвою «Таблиця множення».
https://www.e-olymp.com/uk/problems/8545
Проста задача, в принципі. Знову таки, з дивно високим коефіцієнтом складності, 21%. Треба побудувати квадратну матрицю, як на обкладинках зошитів з математики. Вхідні дані - розмірність матриці, від 1 до 9 включно. Результат відповідним чином відформатувати:
n = 5
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
n = 7
1 2 3 4 5 6 7
2 4 6 8 10 12 14
3 6 9 12 15 18 21
4 8 12 16 20 24 28
5 10 15 20 25 30 35
6 12 18 24 30 36 42
7 14 21 28 35 42 49
Запропонував Саша цю задачу. З приміткою «неробіт». Проходить 70% тестів. E-olimp, на відміну від codeforces, тести не відкриває, шукаємо помилку аналітично.
Показав Саша код:
a = int(input())
if a == 1:
print( '1')
elif a == 2:
print(' 1 2\n 2 4')
elif a == 3:
print(' 1 2 3 \n 2 4 6 \n 3 6 9')
elif a == 4:
print(' 1 2 3 4 \n 2 4 6 8 \n 3 6 9 12 \n 4 8 12 16')
elif a == 5:
print(' 1 2 3 4 5 \n 2 4 6 8 10 \n 3 6 9 12 15 \n 4 8 12 16 20 \n 5 10 15 20 25')
elif a == 6:
print(' 1 2 3 4 5 6 \n 2 4 6 8 10 12 \n 3 6 9 12 15 18 \n 4 8 12 16 20 24 \n 5 10 15 20 25 30 \n 6 12 18 24 30 36')
elif a == 7:
print(' 1 2 3 4 5 6 7 \n 2 4 6 8 10 12 14 \n 3 6 9 12 15 18 21 \n 4 8 12 16 20 24 28 \n 5 10 15 20 25 30 35 \n 6 12 18 24 30 36 42 \n 7 14 21 28 35 42 49')
elif a == 8:
print(' 1 2 3 4 5 6 7 8 \n 2 4 6 8 10 12 14 16 \n 3 6 9 12 15 18 21 24 \n 4 8 12 16 20 24 28 32 \n 5 10 15 20 25 30 35 40 \n 6 12 18 24 30 36 42 48 \n 7 14 21 28 35 42 49 56 \n 8 16 24 32 40 48 56 64')
else:
print(' 1 2 3 4 5 6 7 8 9 \n 2 4 6 8 10 12 14 16 18 \n 3 6 9 12 15 18 21 24 27 \n 4 8 12 16 20 24 28 32 36 \n 5 10 15 20 25 30 35 40 45 \n 6 12 18 24 30 36 42 48 54 \n 7 14 21 28 35 42 49 56 63 \n 8 16 24 32 40 48 56 64 72 \n 9 18 27 36 45 54 63 72 81 ')
Звичайно, Саша дізнався про себе багато цікавого після оприлюднення такого щастя :)
Колегі-програмісти нагадали, що так робити не під час олімпіади – гріх. Навіть запропонували з таким підходом приєднатися до написання прекрасного AceLewis-калькулятора. До речі, хто не в курсі, що це таке, дуже раджу ознайомитися, скоріше за все ви, як це побачите, то не забудете ніколи.
Чудовий в своєму різноманітті інструментарію Python дозволяє чудово форматувати текст при виводі. Нам треба вирівняти текст вправо в межах двох символів? Не проблема. Як просто і елегантно, правда?
n = int(input())
for x in range(1, n+1):
for y in range(1, n+1):
print(str(x*y).rjust(2), end = ' ')
print()