• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Czy ten algorytm jest poprawny?

Object Storage Arubacloud
0 głosów
321 wizyt
pytanie zadane 31 stycznia 2023 w Python przez niezalogowany
zamknięte 7 lutego 2023

Czy ten algorytm na wyliczenie lidera w zbiorze liczb jest prawidłowy?

ile = int(input("Ile liczb: "))
lista = []
for i in range(0, ile):
    liczby = int(input("Podaj liczby: "))
    lista.append(liczby)
print(lista)

for i in range(0, ile):
    dopary = 1
    lider = lista[0]
    zlicz = 0
    if dopary == 0:
        print("Nie ma lidera")
    if dopary > 0:
        if lista[i] == lider:
            dopary+=1
        else:
            dopary-=1
    for i in range(0, ile):
        if lista[i] == lider:
            zlicz+=1
if zlicz > ile / 2:
    print("Liderem jest", lider)
else:
    print("Nie ma lidera")
komentarz zamknięcia: .
komentarz 31 stycznia 2023 przez Benek Szeryf (91,050 p.)
Podaj treść zadania.
komentarz 1 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
Lider jest tylko jeden!
komentarz 1 lutego 2023 przez Benek Szeryf (91,050 p.)

Hm, jeśli tak, to chyba najprościej byłoby to zrobić w ten sposób:

from collections import Counter

def leader(lst):
    c = Counter(lst)
    i, n = sorted(c.items(), key=lambda x: x[1], reverse=True)[0]
    if n > len(lst)//2:
        return i

 

4 odpowiedzi

0 głosów
odpowiedź 1 lutego 2023 przez reaktywny Nałogowiec (41,050 p.)
wybrane 5 lutego 2023
 
Najlepsza

Proponuję taki kod:

lista_wa = (1,3,4,3,2,1,1)
lista_wb = (1,2,2,3,3,3,3,2)
lista_wc = (1,2,2,3,3,3,3,2,3)


def lider(lista):
    lider = max(lista, key=lista.count)
    if lista.count(lider) > len(lista) // 2:
        return lider
    else:
        return None


print(lider(lista_wa))
print(lider(lista_wb))
print(lider(lista_wc))
+1 głos
odpowiedź 1 lutego 2023 przez mokrowski Mędrzec (155,460 p.)
W otrzymaniu odpowiedzi, pomaga poprawne formułowanie pytania. Inaczej można zgadywać: https://www.algorytm.edu.pl/algorytmy-maturalne/lider-w-zbiorze.html
0 głosów
odpowiedź 31 stycznia 2023 przez adrian17 Ekspert (344,860 p.)

Nie podałeś definicji lidera, więc zakładam że to jest "liczba będąca ponad połową elementów", tak?

No to... nie jest poprawna. Zobacz co odpowie na "1 2 3 3 3".

Zresztą nie wiem czemu pytasz zamiast właśnie po prostu odpalić i zobaczyć co powie.

Kod niestety z daleka widać że jest błędny, bo:

lider = lista[0]

To jest jedyne miejsce gdzie przypisujesz coś do `lider`, a lider nie musi być pierwszą liczbą ciągu.

komentarz 31 stycznia 2023 przez niezalogowany
a gdy zmienię lider = lista[0] na lider = lista[i] to czy ten program będzie prawidłowy? Po tej zmianie program działa poprawnie dla 1 2 3 3 3. A co do wcześniejszej wersji programu to działał dla wszystkich sprawdzanych możliwości
komentarz 31 stycznia 2023 przez adrian17 Ekspert (344,860 p.)
Nie, nie zadziała dla 1 3 3 3 2... dla mnie cały ten kod wygląda mega dziwnie.

No i podtrzymuję, zbierz sobie z 10 różnych testów i po prostu je odpal żeby się upewnić czy kod wydaje się działać poprawnie; jak wtedy chcesz jeszcze się upewnić czy działa poprawnie, to śmiało pytaj.
0 głosów
odpowiedź 5 lutego 2023 przez mokrowski Mędrzec (155,460 p.)

Hmm...

#!/usr/bin/env python3

lista_wa = (1,3,4,3,2,1,1)
lista_wb = (1,2,2,3,3,3,3,2)
lista_wc = (1,2,2,3,3,3,3,2,3)

def lider(lista):
    from collections import Counter
    most_value, count_most = Counter(lista).most_common(1)[0]
    return most_value if count_most > (len(lista) / 2) else None

print(lider(lista_wa))
print(lider(lista_wb))
print(lider(lista_wc))

Counter z collections, to bardzo użyteczne narzędzie.

Podobne pytania

+1 głos
1 odpowiedź 135 wizyt
0 głosów
1 odpowiedź 162 wizyt
pytanie zadane 24 stycznia 2020 w C i C++ przez Programator6909 Użytkownik (780 p.)
+1 głos
2 odpowiedzi 1,225 wizyt

92,579 zapytań

141,432 odpowiedzi

319,663 komentarzy

61,964 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...