Можете просто примерно написать как думать, а то вообще идей нет
задан 6 окт 2019 в 6:26
2
first_max = int(input())
second_max = int(input())
if first_max < second_max:
first_max, second_max = second_max, first_max
element = int(input())
while element != 0:
if element > first_max:
second_max, first_max = first_max, element
elif element > second_max:
second_max = element
element = int(input())
print(second_max)
ответ дан 6 окт 2019 в 6:27
Андрей КрузликАндрей Крузлик
1,2633 золотых знака11 серебряных знаков17 бронзовых знаков
Пожалуй эффективнее всего будет воспользоваться функцией heapq.nlargest():
from heapq import nlargest
res = nlargest(2, items)[1]
ответ дан 6 окт 2019 в 7:14
Можно написать функцию:
def find_maxes(array, count):
# копируем список чтобы не изменить старую
copied_array = array.copy()
maximums = []
if count > len(copied_array):
raise ValueError('Количество не может превышать длину списка')
for _ in range(count):
max_val = max(copied_array) # получаем максимальное значение
copied_array.remove(copied_array) # удаляем его из списка
maximums.append(max_val) # добавляем в наш ожидаемый результат
return maximums
или же можно поступить хитро
def find_maxes(array, count):
if count > len(array):
raise ValueError('Количество не может превышать длину списка')
sorted_array = sorted(array) # отсортировать список
# Забрать последние элементы из спика так как они будут максимальными
return sorted_array[len(array)-count: len(array)]
ответ дан 6 окт 2019 в 6:44
E1mirE1mir
1,89811 серебряных знаков23 бронзовых знака
2
b=[3,5,6,7,7,7]
print(list(set(b))[-2])
функция set позволит создать множество отсортированных по возрастанию отличных друг от друга чисел, функция list позволит создать список и обратиться к предпоследнему (или -2) элементу.
<<6
ответ дан 29 окт 2020 в 21:37
FeToRFeToR
12 бронзовых знака
I’m learning Python and the simple ways to handle lists is presented as an advantage. Sometimes it is, but look at this:
>>> numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> numbers.remove(max(numbers))
>>> max(numbers)
74
A very easy, quick way of obtaining the second largest number from a list. Except that the easy list processing helps write a program that runs through the list twice over, to find the largest and then the 2nd largest. It’s also destructive – I need two copies of the data if I wanted to keep the original. We need:
>>> numbers = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> if numbers[0]>numbers[1]):
... m, m2 = numbers[0], numbers[1]
... else:
... m, m2 = numbers[1], numbers[0]
...
>>> for x in numbers[2:]:
... if x>m2:
... if x>m:
... m2, m = m, x
... else:
... m2 = x
...
>>> m2
74
Which runs through the list just once, but isn’t terse and clear like the previous solution.
So: is there a way, in cases like this, to have both? The clarity of the first version, but the single run through of the second?
asked Apr 25, 2013 at 22:16
10
You could use the heapq module:
>>> el = [20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7]
>>> import heapq
>>> heapq.nlargest(2, el)
[90.8, 74]
And go from there…
answered Apr 25, 2013 at 22:23
Jon ClementsJon Clements
138k32 gold badges244 silver badges278 bronze badges
11
Since @OscarLopez and I have different opinions on what the second largest means, I’ll post the code according to my interpretation and in line with the first algorithm provided by the questioner.
def second_largest(numbers):
count = 0
m1 = m2 = float('-inf')
for x in numbers:
count += 1
if x > m2:
if x >= m1:
m1, m2 = x, m1
else:
m2 = x
return m2 if count >= 2 else None
(Note: Negative infinity is used here instead of None
since None
has different sorting behavior in Python 2 and 3 – see Python – Find second smallest number; a check for the number of elements in numbers
makes sure that negative infinity won’t be returned when the actual answer is undefined.)
If the maximum occurs multiple times, it may be the second largest as well. Another thing about this approach is that it works correctly if there are less than two elements; then there is no second largest.
Running the same tests:
second_largest([20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7])
=> 74
second_largest([1,1,1,1,1,2])
=> 1
second_largest([2,2,2,2,2,1])
=> 2
second_largest([10,7,10])
=> 10
second_largest([1,1,1,1,1,1])
=> 1
second_largest([1])
=> None
second_largest([])
=> None
Update
I restructured the conditionals to drastically improve performance; almost by a 100% in my testing on random numbers. The reason for this is that in the original version, the elif
was always evaluated in the likely event that the next number is not the largest in the list. In other words, for practically every number in the list, two comparisons were made, whereas one comparison mostly suffices – if the number is not larger than the second largest, it’s not larger than the largest either.
answered Apr 25, 2013 at 23:15
Thijs van DienThijs van Dien
6,4511 gold badge29 silver badges48 bronze badges
12
You could always use sorted
>>> sorted(numbers)[-2]
74
answered Apr 25, 2013 at 22:21
VolatilityVolatility
31k10 gold badges80 silver badges88 bronze badges
1
Try the solution below, it’s O(n)
and it will store and return the second greatest number in the second
variable. UPDATE: I’ve adjusted the code to work with Python 3, because now arithmetic comparisons against None
are invalid.
Notice that if all elements in numbers
are equal, or if numbers
is empty or if it contains a single element, the variable second
will end up with a value of None
– this is correct, as in those cases there isn’t a “second greatest” element.
Beware: this finds the “second maximum” value, if there’s more than one value that is “first maximum”, they will all be treated as the same maximum – in my definition, in a list such as this: [10, 7, 10]
the correct answer is 7
.
def second_largest(numbers):
minimum = float('-inf')
first, second = minimum, minimum
for n in numbers:
if n > first:
first, second = n, first
elif first > n > second:
second = n
return second if second != minimum else None
Here are some tests:
second_largest([20, 67, 3, 2.6, 7, 74, 2.8, 90.8, 52.8, 4, 3, 2, 5, 7])
=> 74
second_largest([1, 1, 1, 1, 1, 2])
=> 1
second_largest([2, 2, 2, 2, 2, 1])
=> 1
second_largest([10, 7, 10])
=> 7
second_largest( [1, 3, 10, 16])
=> 10
second_largest([1, 1, 1, 1, 1, 1])
=> None
second_largest([1])
=> None
second_largest([])
=> None
answered Apr 25, 2013 at 22:51
Óscar LópezÓscar López
231k37 gold badges310 silver badges385 bronze badges
13
You can find the 2nd largest by any of the following ways:
Option 1:
numbers = set(numbers)
numbers.remove(max(numbers))
max(numbers)
Option 2:
sorted(set(numbers))[-2]
answered Jul 12, 2018 at 16:12
Sahil ChhabraSahil Chhabra
10.2k4 gold badges62 silver badges62 bronze badges
0
The quickselect algorithm, O(n) cousin to quicksort, will do what you want. Quickselect has average performance O(n). Worst case performance is O(n^2) just like quicksort but that’s rare, and modifications to quickselect reduce the worst case performance to O(n).
The idea of quickselect is to use the same pivot, lower, higher idea of quicksort, but to then ignore the lower part and to further order just the higher part.
answered Jun 13, 2015 at 18:36
Edward DoolittleEdward Doolittle
3,9702 gold badges14 silver badges27 bronze badges
2
Why to complicate the scenario? Its very simple and straight forward
- Convert list to set – removes duplicates
- Convert set to list again – which gives list in ascending order
Here is a code
mlist = [2, 3, 6, 6, 5]
mlist = list(set(mlist))
print mlist[-2]
answered Nov 7, 2016 at 7:36
3
This is one of the Simple Way
def find_second_largest(arr):
first, second = float('-inf'), float('-inf')
for number in arr:
if number > first:
second = first
first = number
elif second < number < first:
second = number
return second
answered Oct 19, 2021 at 11:58
2
there are some good answers here for type([]), in case someone needed the same thing on a type({}) here it is,
def secondLargest(D):
def second_largest(L):
if(len(L)<2):
raise Exception("Second_Of_One")
KFL=None #KeyForLargest
KFS=None #KeyForSecondLargest
n = 0
for k in L:
if(KFL == None or k>=L[KFL]):
KFS = KFL
KFL = n
elif(KFS == None or k>=L[KFS]):
KFS = n
n+=1
return (KFS)
KFL=None #KeyForLargest
KFS=None #KeyForSecondLargest
if(len(D)<2):
raise Exception("Second_Of_One")
if(type(D)!=type({})):
if(type(D)==type([])):
return(second_largest(D))
else:
raise Exception("TypeError")
else:
for k in D:
if(KFL == None or D[k]>=D[KFL]):
KFS = KFL
KFL = k
elif(KFS == None or D[k] >= D[KFS]):
KFS = k
return(KFS)
a = {'one':1 , 'two': 2 , 'thirty':30}
b = [30,1,2]
print(a[secondLargest(a)])
print(b[secondLargest(b)])
Just for fun I tried to make it user friendly xD
answered Jan 13, 2015 at 16:24
kpiekpie
9,4685 gold badges28 silver badges49 bronze badges
O(n): Time Complexity of a loop is considered as O(n) if the loop variables is incremented / decremented by a constant amount. For example following functions have O(n) time complexity.
// Here c is a positive integer constant
for (int i = 1; i <= n; i += c) {
// some O(1) expressions
}
To find the second largest number i used the below method to find the largest number first and then search the list if thats in there or not
x = [1,2,3]
A = list(map(int, x))
y = max(A)
k1 = list()
for values in range(len(A)):
if y !=A[values]:
k.append(A[values])
z = max(k1)
print z
answered Aug 2, 2016 at 6:27
BharatwajaBharatwaja
8336 silver badges5 bronze badges
1
def SecondLargest(x):
largest = max(x[0],x[1])
largest2 = min(x[0],x[1])
for item in x:
if item > largest:
largest2 = largest
largest = item
elif largest2 < item and item < largest:
largest2 = item
return largest2
SecondLargest([20,67,3,2.6,7,74,2.8,90.8,52.8,4,3,2,5,7])
answered Apr 30, 2018 at 22:33
MikeMike
4504 silver badges12 bronze badges
Just to make the accepted answer more general, the following is the extension to get the kth largest value:
def kth_largest(numbers, k):
largest_ladder = [float('-inf')] * k
count = 0
for x in numbers:
count += 1
ladder_pos = 1
for v in largest_ladder:
if x > v:
ladder_pos += 1
else:
break
if ladder_pos > 1:
largest_ladder = largest_ladder[1:ladder_pos] + [x] + largest_ladder[ladder_pos:]
return largest_ladder[0] if count >= k else None
answered Jan 9, 2019 at 5:39
BilyBily
7316 silver badges15 bronze badges
list_nums = [1, 2, 6, 6, 5]
minimum = float('-inf')
max, min = minimum, minimum
for num in list_nums:
if num > max:
max, min = num, max
elif max > num > min:
min = num
print(min if min != minimum else None)
Output
5
answered May 12, 2020 at 12:55
Using reduce
from functools
should be a linear-time functional-style alternative:
from functools import reduce
def update_largest_two(largest_two, x):
m1, m2 = largest_two
return (m1, m2) if m2 >= x else (m1, x) if m1 >= x else (x, m1)
def second_largest(numbers):
if len(numbers) < 2:
return None
largest_two = sorted(numbers[:2], reverse=True)
rest = numbers[2:]
m1, m2 = reduce(update_largest_two, rest, largest_two)
return m2
… or in a very concise style:
from functools import reduce
def second_largest(n):
update_largest_two = lambda a, x: a if a[1] >= x else (a[0], x) if a[0] >= x else (x, a[0])
return None if len(n) < 2 else (reduce(update_largest_two, n[2:], sorted(n[:2], reverse=True)))[1]
answered Aug 17, 2022 at 13:11
2
>>> l = [19, 1, 2, 3, 4, 20, 20]
>>> sorted(set(l))[-2]
19
answered Jul 21, 2015 at 22:52
Brent D.Brent D.
5432 silver badges7 bronze badges
2
This can be done in [N + log(N) – 2] time, which is slightly better than the loose upper bound of 2N (which can be thought of O(N) too).
The trick is to use binary recursive calls and “tennis tournament” algorithm. The winner (the largest number) will emerge after all the ‘matches’ (takes N-1 time), but if we record the ‘players’ of all the matches, and among them, group all the players that the winner has beaten, the second largest number will be the largest number in this group, i.e. the ‘losers’ group.
The size of this ‘losers’ group is log(N), and again, we can revoke the binary recursive calls to find the largest among the losers, which will take [log(N) – 1] time. Actually, we can just linearly scan the losers group to get the answer too, the time budget is the same.
Below is a sample python code:
def largest(L):
global paris
if len(L) == 1:
return L[0]
else:
left = largest(L[:len(L)//2])
right = largest(L[len(L)//2:])
pairs.append((left, right))
return max(left, right)
def second_largest(L):
global pairs
biggest = largest(L)
second_L = [min(item) for item in pairs if biggest in item]
return biggest, largest(second_L)
if __name__ == "__main__":
pairs = []
# test array
L = [2,-2,10,5,4,3,1,2,90,-98,53,45,23,56,432]
if len(L) == 0:
first, second = None, None
elif len(L) == 1:
first, second = L[0], None
else:
first, second = second_largest(L)
print('The largest number is: ' + str(first))
print('The 2nd largest number is: ' + str(second))
answered Sep 29, 2016 at 5:47
ccyccy
3764 silver badges7 bronze badges
1
Objective: To find the second largest number from input.
Input : 5
2 3 6 6 5
Output: 5
*n = int(raw_input())
arr = map(int, raw_input().split())
print sorted(list(set(arr)))[-2]*
answered Oct 24, 2017 at 8:14
2
you have to compare in between new values, that’s the trick, think always in the previous (the 2nd largest) should be between the max and the previous max before, that’s the one!!!!
def secondLargest(lista):
max_number = 0
prev_number = 0
for i in range(0, len(lista)):
if lista[i] > max_number:
prev_number = max_number
max_number = lista[i]
elif lista[i] > prev_number and lista[i] < max_number:
prev_number = lista[i]
return prev_number
answered Mar 6, 2020 at 16:47
Brian SanchezBrian Sanchez
8041 gold badge12 silver badges11 bronze badges
Best solution that my friend Dhanush Kumar came up with:
def second_max(numbers):
glo_max = numbers[0]
sec_max = float("-inf")
for i in numbers:
if i > glo_max:
sec_max = glo_max
glo_max = i
elif sec_max < i < glo_max:
sec_max = i
return sec_max
#print(second_max([-1,-3,-4,-5,-7]))
assert second_max([-1,-3,-4,-5,-7])==-3
assert second_max([5,3,5,1,2]) == 3
assert second_max([1,2,3,4,5,7]) ==5
assert second_max([-3,1,2,5,-2,3,4]) == 4
assert second_max([-3,-2,5,-1,0]) == 0
assert second_max([0,0,0,1,0]) == 0
answered Nov 5, 2020 at 13:46
You can also try this:
>>> list=[20, 20, 19, 4, 3, 2, 1,100,200,100]
>>> sorted(set(list), key=int, reverse=True)[1]
100
answered Oct 24, 2016 at 5:54
1
A simple way :
n=int(input())
arr = set(map(int, input().split()))
arr.remove(max(arr))
print (max(arr))
answered Dec 18, 2017 at 15:41
rashedcsrashedcs
3,5442 gold badges37 silver badges40 bronze badges
0
use defalut sort() method to get second largest number in the list.
sort is in built method you do not need to import module for this.
lis = [11,52,63,85,14]
lis.sort()
print(lis[len(lis)-2])
answered Apr 23, 2018 at 12:20
saigopi.mesaigopi.me
13.6k2 gold badges79 silver badges54 bronze badges
3
def secondlarget(passinput):
passinputMax = max(passinput) #find the maximum element from the array
newpassinput = [i for i in passinput if i != passinputMax] #Find the second largest element in the array
#print (newpassinput)
if len(newpassinput) > 0:
return max(newpassinput) #return the second largest
return 0
if __name__ == '__main__':
n = int(input().strip()) # lets say 5
passinput = list(map(int, input().rstrip().split())) # 1 2 2 3 3
result = secondlarget(passinput) #2
print (result) #2
answered Aug 19, 2019 at 6:58
if __name__ == '__main__':
n = int(input())
arr = list(map(float, input().split()))
high = max(arr)
secondhigh = min(arr)
for x in arr:
if x < high and x > secondhigh:
secondhigh = x
print(secondhigh)
The above code is when we are setting the elements value in the list
as per user requirements. And below code is as per the question asked
#list
numbers = [20, 67, 3 ,2.6, 7, 74, 2.8, 90.8, 52.8, 4, 3, 2, 5, 7]
#find the highest element in the list
high = max(numbers)
#find the lowest element in the list
secondhigh = min(numbers)
for x in numbers:
'''
find the second highest element in the list,
it works even when there are duplicates highest element in the list.
It runs through the entire list finding the next lowest element
which is less then highest element but greater than lowest element in
the list set initially. And assign that value to secondhigh variable, so
now this variable will have next lowest element in the list. And by end
of loop it will have the second highest element in the list
'''
if (x<high and x>secondhigh):
secondhigh=x
print(secondhigh)
answered Oct 2, 2019 at 8:38
3
Max out the value by comparing each one to the max_item. In the first if, every time the value of max_item changes it gives its previous value to second_max. To tightly couple the two second if ensures the boundary
def secondmax(self, list):
max_item = list[0]
second_max = list[1]
for item in list:
if item > max_item:
second_max = max_item
max_item = item
if max_item < second_max:
max_item = second_max
return second_max
answered Dec 25, 2019 at 12:31
AnkitAnkit
454 bronze badges
1
Most of previous answers are correct but here is another way !
Our strategy is to create a loop with two variables first_highest and second_highest. We loop through the numbers and if our current_value is greater than the first_highest then we set second_highest to be the same as first_highest and then the second_highest to be the current number. If our current number is greater than second_highest then we set second_highest to the same as current number
#!/usr/bin/env python3
import sys
def find_second_highest(numbers):
min_integer = -sys.maxsize -1
first_highest= second_highest = min_integer
for current_number in numbers:
if current_number == first_highest and min_integer != second_highest:
first_highest=current_number
elif current_number > first_highest:
second_highest = first_highest
first_highest = current_number
elif current_number > second_highest:
second_highest = current_number
return second_highest
print(find_second_highest([80,90,100]))
print(find_second_highest([80,80]))
print(find_second_highest([2,3,6,6,5]))
answered Nov 12, 2018 at 6:42
grepitgrepit
20.8k6 gold badges101 silver badges81 bronze badges
1
Below code will find the max and the second max numbers without the use of max function. I assume that the input will be numeric and the numbers are separated by single space.
myList = input().split()
myList = list(map(eval,myList))
m1 = myList[0]
m2 = myList[0]
for x in myList:
if x > m1:
m2 = m1
m1 = x
elif x > m2:
m2 = x
print ('Max Number: ',m1)
print ('2nd Max Number: ',m2)
answered Feb 6, 2021 at 17:22
SalmanSalman
1,1965 gold badges28 silver badges59 bronze badges
2
Here I tried to come up with an answer.
2nd(Second) maximum element in a list using single loop and without using any inbuilt function.
def secondLargest(lst):
mx = 0
num = 0
sec = 0
for i in lst:
if i > mx:
sec = mx
mx = i
else:
if i > num and num >= sec:
sec = i
num = i
return sec
answered Apr 22, 2021 at 11:27
varunvarun
277 bronze badges
1
We can use 2 loop to compare and find the second largest number from list rather than removing max number from list:
def second_largest(list1):
second_max = list1[0]
max_nu = max(list1)
for i in range(len(list1) -1):
for j in range(1,len(list1)):
if list1[i] > list1[j] and list1[i] < max_nu :
second_max = list1[i]
elif list1[i] < list1[j] and list1[j] < max_nu:
second_max = list1[j]
return second_max
l = [2, 4, 5, 6, 8, 7, 21, 20]
print(second_largest(l))
answered Nov 17, 2021 at 8:09
1
Когда в списке много элементов, нам может понадобиться найти максимальный или минимальный элемент, и Python значительно упростил нам задачу.
В этой статье мы расскажем, как можно найти второе по величине число в списке Python с помощью следующих принципов:
- Сортировка списка и печать предпоследнего числа списка.
- Удаление максимального элемента.
- Нахождение максимального элемента.
- Перемещение по списку.
Давайте разберем первый подход.
Сортировка списка и печать предпоследнего числа
Следующая программа показывает, как это можно сделать на Python.
Пример –
#program to find the second largest number of list # declaring the list list_val = [20, 30, 40, 25, 10] # sorting the list list_val.sort() #displaying the second last element of the list print("The second largest element of the list is:", list_val[-2])
Выход:
The second largest element of the list is: 30
Объяснение –
- Мы объявили список, из которого хотим изъять второй элемент, начиная с конца списка.
- После этого мы использовали метод сортировки, чтобы все элементы нашего списка располагались в порядке возрастания.
- Теперь мы используем отрицательную индексацию, так как второе по величине число будет на предпоследней позиции.
Второй метод – получить второй по величине элемент списка, удалив максимальный элемент.
Давайте посмотрим, как мы можем это сделать.
Удаление максимального элемента
Пример –
#program to find the second largest number of list # declaring the list list_val = [20, 30, 40, 25, 10] # new_list is a set of list1 res_list = set(list_val) #removing the maximum element res_list.remove(max(res_list)) #printing the second largest element print(max(res_list))
Выход:
30
Объяснение –
Давайте разберемся, что мы сделали в вышеуказанной программе:
- Мы объявили список, из которого хотим изъять второй по величине элемент.
- После этого мы использовали метод set, чтобы взять все уникальные элементы списка.
- Теперь мы используем max(), чтобы получить максимальное значение из списка, а затем удаляем его.
- После этого мы печатаем максимум результирующего списка, который даст нам второе по величине число.
В третьем методе мы будем использовать цикл for и и с его помощью найдем второй максимум из списка.
Нахождение максимального элемента
Пример –
# declaring empty list list_val = [] # user provides the number of elements to be added in the list num_list = int(input("Enter number of elements in list: ")) for i in range(1, num_list + 1): element = int(input("Enter the elements: ")) list_val.append(element) # sort the list list_val.sort() # print second largest element print("Second largest element is:", list_val[-2])
Выход:
Enter number of elements in list: 5 Enter the elements: 10 Enter the elements: 20 Enter the elements: 30 Enter the elements: 40 Enter the elements: 50 The second largest element is: 40
Объяснение –
- Мы объявили пустой список, в который будем вставлять элементы.
- После этого мы просим пользователя предоставить нам количество элементов, которые мы хотели бы добавить в наш список.
- Используем метод сортировки, чтобы все элементы нашего списка располагались в порядке возрастания.
- Теперь мы применим отрицательную индексацию, так как второе по величине число будет на второй последней позиции.
Перемещение по списку
В последней программе мы пройдемся по списку, чтобы найти наибольшее число, а затем с помощью условных операторов найдем второе по величине число в списке.
Следующая программа это проиллюстрирует:
def calc_largest(arr): second_largest = arr[0] largest_val = arr[0] for i in range(len(arr)): if arr[i] > largest_val: largest_val = arr[i] for i in range(len(arr)): if arr[i] > second_largest and arr[i] != largest_val: second_largest = arr[i] return second_largest print(calc_largest([20, 30, 40, 25, 10]))
Выход:
30
Объяснение –
Давайте разберемся, что мы сделали в вышеуказанной программе:
- Первый шаг – создать функцию, которая проверяет наибольшее число из списка, просматривая его.
- В следующем цикле for мы снова просматриваем список для поиска наибольшего числа, но на этот раз исключаем предыдущий, так как здесь наша цель – найти вторую по величине функцию.
- Наконец, мы передаем наш список в функцию.
Итак, в этой статье у нас была возможность подумать нестандартно и открыть для себя несколько новых способов разработки логики поиска второго по величине числа в Python.
Изучаю Python вместе с вами, читаю, собираю и записываю информацию опытных программистов.
HateLov 0 / 0 / 0 Регистрация: 22.10.2018 Сообщений: 42 |
||||
1 |
||||
Найти второй максимум в последовательности чисел08.01.2019, 20:34. Показов 22641. Ответов 62 Метки нет (Все метки)
Дана последовательность целых чисел, оканчивающаяся нулём. Необходимо найти число, наиболее близкое к максимальному по величине числу в этой последовательности (второй максимум). Ноль числом последовательности не считается. Формат входных данных Вводится не более чем 215 целых чисел, каждое из которых не превосходит по модулю 215−1. После последнего числа вводится Гарантируется, что последовательность содержит хотя бы два элемента. Формат выходных данных Требуется вывести искомое число. Не могу понять, почему не получается:
Помогите пожалуйста!
0 |
447 / 333 / 172 Регистрация: 01.07.2015 Сообщений: 1,162 |
|
08.01.2019, 20:50 |
2 |
Не могу понять, почему не получается: Потому что если условие выполняется всего один раз, то max2 будет всегда 0
1 |
0 / 0 / 0 Регистрация: 22.10.2018 Сообщений: 42 |
|
08.01.2019, 20:55 [ТС] |
3 |
А как исправить?
0 |
447 / 333 / 172 Регистрация: 01.07.2015 Сообщений: 1,162 |
|
08.01.2019, 20:58 |
4 |
А как исправить? закинуть последовательность в какой-нибудь вектор или сет, а потом найти второй максимум путем сортировки в случае вектора см. ссылки внизу
0 |
0 / 0 / 0 Регистрация: 22.10.2018 Сообщений: 42 |
|
08.01.2019, 22:14 [ТС] |
5 |
Я новичок. Для меня всё это непонятно. Мне просто нужно, что кто – нибудь написал, как правильно, а я сама разберусь дальше в понимании…
0 |
7427 / 5021 / 2891 Регистрация: 18.12.2017 Сообщений: 15,694 |
|
08.01.2019, 22:30 |
6 |
HateLov, Найти два наибольших числа в последовательности см. первый пост от Hitoku.
по модулю 215−1
0 |
Skyer 78 / 62 / 47 Регистрация: 05.05.2013 Сообщений: 196 |
||||
08.01.2019, 22:35 |
7 |
|||
Вам необходимо рассмотреть случай, когда очередное число не больше первого максимума, но больше второго максимума
0 |
7427 / 5021 / 2891 Регистрация: 18.12.2017 Сообщений: 15,694 |
|
08.01.2019, 22:42 |
8 |
Skyer, Ваш вариант не работает:
0 |
78 / 62 / 47 Регистрация: 05.05.2013 Сообщений: 196 |
|
08.01.2019, 22:46 |
9 |
Это как посмотреть. Если массив отсортировать по убыванию, то на втором месте будет 2. в вашем случае можно в первом условии поставить >=
0 |
0 / 0 / 0 Регистрация: 22.10.2018 Сообщений: 42 |
|
08.01.2019, 22:48 [ТС] |
10 |
Ввод:
0 |
ReDoX 447 / 333 / 172 Регистрация: 01.07.2015 Сообщений: 1,162 |
||||
08.01.2019, 22:50 |
11 |
|||
0 |
78 / 62 / 47 Регистрация: 05.05.2013 Сообщений: 196 |
|
08.01.2019, 22:51 |
12 |
HateLov, В вашем примере покажите мне число, которое ближе к 42, чем 13? С while можно, достаточно вводить значения пока очередное k не станет нулем
0 |
0 / 0 / 0 Регистрация: 22.10.2018 Сообщений: 42 |
|
08.01.2019, 22:52 [ТС] |
13 |
Блин, ну не проходили мы ещё такого. Можно это более проще решить? Я всем вам благодарна, но я просто хочу понять, как написать правильно тем способом, который мы проходим…
0 |
7427 / 5021 / 2891 Регистрация: 18.12.2017 Сообщений: 15,694 |
|
08.01.2019, 22:53 |
14 |
Это как посмотреть. согласитесь, что ответ: наиболее близкое к 2 это число 2 как-то не очень.
можно в первом условии поставить >= а разве у Вас в первом условии не >=?
0 |
78 / 62 / 47 Регистрация: 05.05.2013 Сообщений: 196 |
|
08.01.2019, 22:53 |
15 |
ReDoX, из пушки по воробьям бьете))) школьная задачка же
0 |
447 / 333 / 172 Регистрация: 01.07.2015 Сообщений: 1,162 |
|
08.01.2019, 22:54 |
16 |
согласитесь, что ответ: наиболее близкое к 2 это число 2 как-то не очень. Не по теме: и правда чушь какая-то, значит мой код тоже неправильный
0 |
Skyer 78 / 62 / 47 Регистрация: 05.05.2013 Сообщений: 196 |
||||
08.01.2019, 22:56 |
17 |
|||
Как-то так
Yetty, вы правы, не заметил
0 |
447 / 333 / 172 Регистрация: 01.07.2015 Сообщений: 1,162 |
|
08.01.2019, 23:00 |
18 |
Как-то так А если ввести 2 2 2 0, то выведет 0, но ведь ближайшее значение к 2 – 2, нет? Или я чего-то не понял?
0 |
7427 / 5021 / 2891 Регистрация: 18.12.2017 Сообщений: 15,694 |
|
08.01.2019, 23:02 |
19 |
Skyer, для последовательности целых чисел нельзя за первый max брать max=0 (будет работать неправильно)
0 |
78 / 62 / 47 Регистрация: 05.05.2013 Сообщений: 196 |
|
08.01.2019, 23:04 |
20 |
ReDoX, это вопрос трактования условия задачи. Надо уточнять что именно преподаватель понимает под вторым максимумом. в моей практике были разные случаи Добавлено через 1 минуту
0 |
Skip to content
Задача «Второй максимум»
Условие
Последовательность состоит из различных натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности. Гарантируется, что в последовательности есть хотя бы два элемента.
Решение задачи от разработчиков на Python:
Другая реализация задачи на Python:
Смотреть видео — Задача «Второй максимум» решение на Python
Делитесь с друзьями ссылкой на ответ и задавайте вопросы в комментариях! 👇
Related Posts