Informator maturalny 2023: Zadanie 1

Arkusz i pliki wymieniane w tym zadaniu można pobrać ze strony CKE.
Bezpośredni link do plików znajduje się tutaj.

Zadanie

Segmentem nazwiemy spójny ciąg elementów tablicy składający się z co najmniej 1 elementu.

Przykład: dla tablicy A = [1, 8, 4, 2, 7, 9] segmentami są ciąg 1,8,4 oraz ciąg 8,4,2,7, natomiast
nie jest segmentem ciąg 8,2,7,9 (bo w tablicy A pomiędzy liczbą 8 a liczbą 2 jest liczba 4).

Zadanie 1.3 (0-3)

Elementy pewnej 1000-elementowej tablicy A zapisano kolejno w pliku dane1_3.txt. Każda z liczb w pliku dane1_3.txt należy do przedziału [-100, 100] i jest zapisana w oddzielnym wierszu.

Napisz program wyznaczający największą sumę segmentu tablicy A.

Do oceny oddajesz:

  • plik zadanie1_3.txt zawierający jedną liczbę będącą odpowiedzią do zadania (największą sumą),
  • pliki(i) z komputerową realizacją zadania (kodem programu).

Rozwiązanie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
plik = open('dane1_3.txt', 'r')
lista = plik.readlines()
plik.close()

lista_new = [int(i.rstrip('\n')) for i in lista]
print(lista_new)

#-----Algorytm Kaden'a-----
wynik = 0
suma_chwilowa = 0

for i in lista_new:
    suma_chwilowa = max(0, suma_chwilowa + i)
    wynik = max(suma_chwilowa, wynik)
#--------------------------

print(wynik)

plik = open('zadanie1_3.txt', 'w')
plik.write(str(wynik))
plik.close()

Zadanie 1.4 (0-4)

Elementy pewnej tablicy A o 100 000 elementów zapisano kolejno w pliku zadanie1_4.txt. Każda z liczb w pliku zadanie1_4.txt należy do przedziału od [-100, 100] i jest zapisana w oddzielnym wierszu.

Przyjmujemy, że pierwszy element tablicy ma indeks równy 1. Napisz program wypisujący indeks pierwszego i indeks ostatniego elementu segmentu o największej sumie. W tablicy A jest tylko jeden taki segment, a suma jego elementów jest dodatnia.

Do oceny oddajesz:

  • plik zadanie1_4.txt zawierający jedną liczbę będącą odpowiedzią do zadania (największą sumą),
  • pliki(i) z komputerową realizacją zadania (kodem programu).

Rozwiązanie

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
plik = open('dane1_4.txt', 'r')
lista = plik.readlines()
plik.close()

lista_new = [int(i.rstrip('\n')) for i in lista]
print(lista_new)

#-----Algorytm Kaden'a z uwzględnieniem miejsc-----
wynik = 0
suma_chwilowa = 0
start = 0
koniec = 0

for i, j in enumerate(lista_new):
    if suma_chwilowa <= 0:
        start_chwilowy = i
        suma_chwilowa = j
    else:
        suma_chwilowa += j

    if suma_chwilowa > wynik:
        wynik = suma_chwilowa
        koniec = i + 1
        start = start_chwilowy + 1
#--------------------------

zapis = str(start) + ' ' + str(koniec)

plik = open('zadanie1_4.txt', 'w')
plik.write(zapis)
plik.close()