Задача 6. Таблица за умножение
Loading...
+ Нов въпрос
kirilof93 avatar kirilof93 1 Точки

Python - Multiply table

Здравейте, за пореден път решавам задача вярно, с точните аутпути от условието, и въпреки това получавам (в случая 0т.) непълен брой точки от Джъдж системата! Някой може ли да ми каже защо на този работещ код не ми дава никакви точки?

n = int(input())

for x3 in range(1, n % 10 + 1):
    if x3 <= n / 10:
        for x2 in range(1, 3):
            if x2 <= n / 100:
                for x1 in range(1, 4):
                    if x1 <= n % 10:
                        result = x1 * x2 * x3
                    if x3 * x2 * x1 == result:
                        print(f"{x3} * {x2} * {x1} = {result};")

 

 

Задача 6. Таблица за умножение

Най-малкият син на сем. Иванови все още не знае таблицата за умножение. Веднага след коледните празници, той ще има контролно и вие трябва да му помогнете да я научи. Вашата задача е да съставите програма, в която се въвежда цяло трицифрено число, и се извежда таблицата за умножение. Поради особености на вашата програма вземаме цифрите на въведеното число в обратен ред. Максималната стойност на множителите е определена от всяка една от 3-те цифри на въведеното число.

Вход

Входът е цяло трицифрено число в интервала [111…999].

Изход

Да се отпечатат на конзолата няколко на брой реда в следния формат:

{първата цифра} * {втората цифра} * {третата цифра} = {резултатът от умножението на трите цифри}

Първата, втората и третата цифра не могат да бъдат отрицателно или равно на 0 число!

 

 

Примерен вход и изход

Вход

Изход

Обяснения

Вход

Изход

324

1 * 1 * 1 = 1;

1 * 1 * 2 = 2;

1 * 1 * 3 = 3;

1 * 2 * 1 = 2;

1 * 2 * 2 = 4;

1 * 2 * 3 = 6;

2 * 1 * 1 = 2;

2 * 1 * 2 = 4;

2 * 1 * 3 = 6;

2 * 2 * 1 = 4;

2 * 2 * 2 = 8;

2 * 2 * 3 = 12;

3 * 1 * 1 = 3;

3 * 1 * 2 = 6;

3 * 1 * 3 = 9;

3 * 2 * 1 = 6;

3 * 2 * 2 = 12;

3 * 2 * 3 = 18;

4 * 1 * 1 = 4;

4 * 1 * 2 = 8;

4 * 1 * 3 = 12;

4 * 2 * 1 = 8;

4 * 2 * 2 = 16;

4 * 2 * 3 = 24;

Вземаме цифрите от числото както следва: неговата последна за първо, средната за второ, и първата за трето число.

222

1 * 1 * 1 = 1;

1 * 1 * 2 = 2;

1 * 2 * 1 = 2;

1 * 2 * 2 = 4;

2 * 1 * 1 = 2;

2 * 1 * 2 = 4;

2 * 2 * 1 = 4;

2 * 2 * 2 = 8;

0
Python
mark79 avatar mark79 635 Точки

Здравей, ето ти едно бързо решение.

Извинявам се, че сега нямам време да гледам кода ти!

number = int(input())

first_digit = number % 10
second_digit = number // 10 % 10
third_digit = number // 100 % 10

for num1 in range(1, first_digit + 1):
    for num2 in range(1, second_digit + 1):
        for num3 in range(1, third_digit + 1):
            result = num1 * num2 * num3
            print(f"{num1} * {num2} * {num3} = {result};")

 

0
heksimix avatar heksimix 2 Точки
for x2 in range(1, 3): - Тук крайният номер за цикъла е 3, което е грешно
for x1 in range(1, 4): - Тук крайният номер за цикъла е 4, което е грешно

Ако числото което въведеш е 555 или 666 няма да получаваш всички резултати. Също така и if са ненужни.

Ето едно решение от мен:

n = int(input())

for x3 in range(1, n % 10 + 1):  
    for x2 in range(1, (n // 10) % 10 + 1):
        for x1 in range(1, n // 100 + 1):
            print(f"{x3} * {x2} * {x1} = {x1 * x2 * x3};")
0
23/02/2020 18:16:19
DeveloperEnthusiast avatar DeveloperEnthusiast 302 Точки

Just in case, че имаш подобна задача на тази другата седмица, искам да ти кажа, че можеш да си направиш числото на стринг и да му вземеш индексите, т.е.

number = int(input())
num_str = str(number)

for first_digit in range(1, int(num_str[2]) + 1):
    for second_digit in range(1, int(num_str[1]) + 1):
        for third_digit in range(1, int(num_str[0]) + 1):
            result = first_digit * second_digit * third_digit
            print(f'{first_digit} * {second_digit} * {third_digit} = {result};')

а може и с математическите сложнотии и щуротии... да делиш числото модулно на 10, па на 100 и т.н. за там която цифра ти трябва. Успех smiley

 

п.с. по никакъв начин не искам да обиждам или засягам колегата, който ти е отговорил преди мен

0
23/02/2020 18:58:23