Приклади розв’язування задач на обробку чисел
Зміст
- 1. Функція GetPosMaxNum(). Визначити позицію максимальної цифри числа. Пошук позиції зліва направо
- 2. Функція SumOddNum(). Обчислити суму непарних цифр числа
- 3. Функція GetNumMore7(). Обчислити кількість цифр, більших числа 7
- 4. Функція GetMaxPairNum(). Обчислити максимальну парну цифру числа
- 5. Функція GetPosMinOddNum(). Обчислити позицію (номер) мінімальної непарної цифри числа
- Зв’язані теми
Пошук на інших ресурсах:
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
⇑
Зв’язані теми
⇑