Примеры решения задач на обработку чисел
Содержание
- 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 на корректность 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
⇑
Связанные темы
⇑