Форум » Массивы, сортировка, работа с файлами » Тип 26 №42, не сходится с ответом, помогите, что не так » Ответить

Тип 26 №42, не сходится с ответом, помогите, что не так

L4043: [pre2] f = open('42.txt') s=[] n = f.readline() s=n.split() S=int(s[1]) print(S) Z=[] A=[] for line in f: s1=[] temp=line.split() if temp[0]=='A': A.append( [int(temp[1]),int(temp[2]) ]) else: Z.append([int(temp[1]),int(temp[2])]) f.close() A.sort() # так как все изделия Z гарантированно купят, то проверку остатка денег не делаем for i in range(len(Z)):# закупаем все изделия Z S-=Z[ i][0]*Z[ i][1] # Закупка изделий A коробками kol_A=0 i=0 while S-A[ i][0]*A[ i][1]>=0: S-=A[ i][0]*A[ i][1] i+=1 kol_A+=A[ i][1] # Закупка изделий A поштучно j=0 while j<i and S-A[ i][0]>=0: S-=A[ i][0] kol_A+=1 j+=1 print(kol_A,S) [/pre2] Ответ 7387 111, на сайте 7354 111

Ответов - 5

Поляков: Проверьте, как работает ваша программа на тестовом примере из условия.

L4043: Исправила, для примера теперь работает верно, ответ для исходного файла по прежнему 7387 111, а на сайте 7354 111 [pre2] f = open('42.txt') s=[] n = f.readline() s=n.split() S=int(s[1]) print(S) Z=[] A=[] for line in f: s1=[] temp=line.split() if temp[0]=='A': A.append( [int(temp[1]),int(temp[2]) ]) else: Z.append([int(temp[1]),int(temp[2])]) f.close() A.sort( key = lambda x: (x[0], x[1]) ) print(A) # так как все изделия Z гарантированно купят, то проверку остатка денег не делаем for i in range(len(Z)):# закупаем все изделия Z S-=Z[ i][0]*Z[ i][1] # Закупка изделий A коробками kol_A=0 i=0 while S-A[ i][0]*A[ i][1]>=0: S-=A[ i][0]*A[ i][1] i+=1 kol_A+=A[ i][1] print(S) # Закупка изделий A поштучно while S-A[ i][0]>=0: S-=A[ i][0] kol_A+=1 print(kol_A,S) [/pre2]

zachto: [pre2]f = open(r"C:\Users\nickolas\Downloads\26-42.txt") s = [] n = f.readline() s = n.split() S = int(s[1]) print(S) Z = [] A = [] for line in f: s1 = [] temp = line.split() if temp[0] == 'A': A.append([int(temp[1]), int(temp[2])]) else: Z.append([int(temp[1]), int(temp[2])]) f.close() A.sort(key=lambda x: x[0]) print(A) # так как все изделия Z гарантированно купят, то проверку остатка денег не делаем for i in range(len(Z)): # закупаем все изделия Z S -= Z[0] * Z[1] kol_A = 0 ij = 0 while S - A[ij][0] >= 0: S -= A[ij][0] A[ij][1] -= 1 if A[ij][1] == 0: ij += 1 kol_A += 1 print(kol_A, S) [/pre2] Если убрать закупку партиями, то ответ сходится.


zachto: Нашел вашу ошибку. [pre2]while S-A[ i][0]*A[ i][1]>=0: S-=A[ i][0]*A[ i][1] i+=1 kol_A+=A[ i][1][/pre2] Вы увеличиваете i перед прибавлением к ответу, а надо, очевидно, после.

L4043: Спасибо большое!!!!!!



полная версия страницы