Python. Приклади розв’язування задач на обробку чисел




Приклади розв’язування задач на обробку чисел


Зміст


Пошук на інших ресурсах:

1. Функція GetPosMaxNum(). Визначити позицію максимальної цифри числа. Пошук позиції зліва направо
1.1. Нумерація позиції зліва-направо (=>)

Нижченаведена функція GetPosMaxNum() повертає позицію першої максимальної цифри числа. Позиція нумерується з 1. Номер позиції визначається у напрямку зліва направо.

# Функція GetPosMaxNum() - знайти позицію максимальної цифри цілого числа
# Перегляд позиції здійснити зліва-направо
# Наприклад: 283412 => 2 позиція (максимум = 8).

# Функція отримує параметр n (n>0)
def GetPosMaxNum(n):
    # 1. Перевірка, чи n>0
    if (n<=0):
        return -1

    # 2. Сформувати список з цифр числа
    L = []
    while n>0:
        L = [n%10] + L
        n = n//10

    # 3. Знайти максимум у списку та позицію цього максимуму
    # 3.1. Встановити перший елемент списку
    Max = L[0]
    PosMax = 0

    # 3.2. Цикл пошуку максимуму
    i = 1
    while i<len(L):
        if Max<L[i]:
            Max = L[i]
            PosMax = i
        i = i+1

    return PosMax+1 # нумерація з 1

# Демонстрація роботи функції GetPosMaxNum()
n = int(input("n = "))
PosMax = GetPosMaxNum(n)
print("PosMax = ", PosMax)

Результат виконання програми

n = 111111171111
PosMax = 8

 

1.2. Реалізація для напрямку справа-наліво (<=)

Щоб отримати позицію максимального значення справа-наліво, потрібно у функції GetPosMaxNum() змінити рядок у циклі while()

L = [n%10] + L

на наступний рядок

L = L + [n%10]

 

1.3. Обчислення позиції мінімальної цифри цілого числа

Для обчислення позиції мінімальної цифри цілого числа у будь-якому напрямку, потрібно у прикладі п. 9.1 у рядку порівняння

...
if Max<L[i]:
    ...

знак < (менше) замінити на знак > (більше). Логічно було б також замінити імена змінних у функції:

  • Max => Min;
  • PosMax => PosMin.

Також можна замінити ім’я функції, наприклад, GetPosMinNum().

 

2. Функція SumOddNum(). Обчислити суму непарних цифр числа

У прикладі наведена функція SumOddNum(), яка обчислює суму непарних цифр числа. Наприклад, для числа 12397544 результат буде

1 + 3 + 9 + 7 + 5 = 25

Вхідним параметром функції є вихідне число. Для перевірки цифри на непарність використовується умова

n%2 == 1

Текст демонстраційної програми наступний

# Задача. Визначити суму непарних цифр числа.

# Функція, яка визначає суму непарних цифр числа
def SumOddNum(n):
    summ = 0 # шукана сума

    while n>0:
        if (n%2) == 1: # перевірка, чи число непарне
            summ = summ + n%10
        n = n//10

    # Повернути результат
    return summ

# Демонстрація використання функції SumOddNum()
n = input("n = ") # Ввести число
summ = SumOddNum(n) # Виклик функції, обчислення
print("Sum = ", summ)

Результат виконання програми

n = 100000333
Sum = 10

 

3. Функція GetNumMore7(). Обчислити кількість цифр, більших числа 7

У прикладі нижче реалізована функція, яка в заданому числі визначає кількість цифр більших за 7. Наприклад, для числа 123485379 результат буде 2 (цифри 8 і 9 є більше за 7).

# Функція, яка обчислює кількість цифр, більших за 7
def GetNumMore7(n):
    k = 0 # результат - кількість цифр

    while n>0:
        if (n%10) > 7: # перевірка, чи цифра більше за 7
            k = k+1 # якщо цифра більше 7, то збільшити k
        n = n//10

    # Повернути результат
    return k

# Демонстрація використання функції GetNumMore7()
n = input("n = ") # Ввести число
count = GetNumMore7(n) # Виклик функції, обчислення
print("count = ", count)

Результат виконання програми

n = 8674493609
('count = ', 3)

 

4. Функція GetMaxPairNum(). Обчислити максимальну парну цифру числа

У прикладі реалізовано функцію, яка обчислює максимальну парну цифру числа n (n>0). Наприклад, для числа 2811169 правильний результат буде цифра 8.

Якщо в числі немає парних цифр, функція повертає -1.

Для пошуку максимуму у функції виконуються наступні дії:

  • формується список L з цифр числа;
  • викликається стандартна функція max() пошуку максимуму в списку L.

 

# Функція, яка обчислює максимальну парну цифру числа
def GetMaxPairNum(n):
    # Сформувати список з непарних цифр числа
    L = []

    while n>0:
        if (n%2) == 0:     # перевірка, чи остання цифра числа парна
            L = L + [n%10] # якщо цифра парна, то додати її в список
        n = n//10 # зменшити число

        # Повернути результат
        if L == []:
            return -1
        else:
            return max(L) # використати стандартну функцію max()

# Демонстрація використання функції GetNumMore7()
n = input("n = ") # Ввести число
Max = GetMaxPairNum(n) # Виклик функції, обчислення
print("Max = ", Max)

Результат виконання функції

n = 262320113
Max = 6

 

5. Функція GetPosMinOddNum(). Обчислити позицію (номер) мінімальної непарної цифри числа
5.1. Напрям визначення позиції зліва-направо (=>)

У прикладі реалізовано функцію GetPosMinOddNum(), яка визначає позицію мінімальної непарної цифри числа n, що є вхідним параметром. Номер позиції починається з 1 і визначається в напрямку зліва-направо (=>).

Наприклад, для числа 22524872 правильна відповідь буде 3 (мінімальна непарна цифра 5 розміщується на 3-й позиції).

Якщо у числі немає непарних цифр, функція повертає -1.

З метою спрощення розв’язку задачі, у функції виконуються такі основні дії:

  • формується список L з непарних цифр числа;
  • якщо список L не порожній (L!=[]), то визначається мінімальне значення Min в списку L з допомогою виклику стандартної функції min;
  • за значенням Min обчислюється позиція MinPos першого входження Min у списку L в напрямку зліва-направо.

 

# Функція, яка повертає позицію (номер) мінімальної непарної цифри числа.
# Якщо у числі немає непарних цифр, то повертається -1.
# Номер позиції розглядаєтья зліва-направо (=>)
def GetPosMinOddNum(n):
    # 1. Сформувати список з цифр числа
    L = []
    while n>0:
        L = [n%10] + L # зліва-направо
        n = n//10

    # 2. Пошук мінімуму серед непарних цифр
    # 2.1. Початкові присвоєння
    fOdd = False # Спочатку прийняти, що непарних цифр немає у числі

    # 2.2. Цикл пошуку мінімальної позиції
    i = 0
    while i<len(L):
        # Обробка цифри L[i]
        if L[i]%2 == 1: # Чи є цифра L[i] непарна?
            if fOdd == False:
                # Якщо перша цифра непарна, то просто запам'ятати мінімум
                Min = L[i]
                MinPos = i
                fOdd = True
            else:
                # Якщо не перша непарна цифра, то реалізувати порівняння
                if Min>L[i]:
                    Min = L[i]
                    MinPos = i

        i = i+1

    if fOdd: return MinPos+1
    else: return -1

# Демонстрація використання функції GetPosMinOddNum()
n = input("n = ") # Ввести число
Pos = GetPosMinOddNum(n) # Виклик функції, обчислення
print("Pos = ", Pos)

Результат виконання програми

n = 22213320
Pos = 4

 

5.2. Напрям визначення позиції справа-наліво (<=)
5.2.1. Заміна рядка

Щоб визначити номер позиції в напрямку справа-наліво, потрібно в попередньому прикладі у циклі while() формування списку L рядок

L = [n%10] + L # зліва-направо

замінити на рядок

L = L + [n%10] # справа-наліво

У такому випадку список з цифр формується в зворотній послідовності.

 

5.2.2. Використання коду без списку

Для випадку нумерації позиції справа-наліво (<=) добре підійде реалізація функції без попереднього формування списку як показано нижче.

 

# Функція, яка повертає позицію (номер) мінімальної непарної цифри числа.
# Якщо у числі немає непарних цифр, то повертається -1.
# Номер позиції розглядаєтья справа-наліво (<=)
def GetPosMinOddNum(n):
    # Спочатку прийняти, що непарних цифр немає в числі
    fOdd = False
    MinPos = -1
    pos = 0

    while n>0:
        pos = pos + 1 # поточна позиція
        d = n%10     # взяти цифру з кінця

        if d%2 == 1: # чи непарна цифра t?
            if fOdd == False:
                # якщо це перша цифра
                fOdd = True
                MinPos = pos
                Min = d
            else:
                # якщо цифра не перша, то реалізувати порівняння
                if Min>d:
                    MinPos = pos
                    Min = d

        n = n//10

    return MinPos

# Демонстрація використання функції GetPosMinOddNum()
n = input("n = ") # Ввести число
Pos = GetPosMinOddNum(n) # Виклик функції, обчислення
print("Pos = ", Pos)

Результат виконання програми

n = 23481234550
Pos = 7

 


Зв’язані теми