Loading...

Във форума е въведено ограничение, което позволява на потребителите единствено да разглеждат публикуваните въпроси.

Tryhard avatar Tryhard 1 Точки

Number Beggars - Fundamentals PY

Здравейте, от два часа съм "зациклил" трябват ми насоки как да реша тази задача. 

1.Number Beggars

Your task here is pretty simple: given a list of numbers and a number of beggars, you are supposed to return a list with the sum of what each beggar brings home, assuming they all take regular turns, from the first to the last.

For example: [1,2,3,4,5] for 2 beggars will return a result of 9 and 6, as the first one takes [1,3,5], the second collects [2,4].

The same list with 3 beggars would produce a better outcome for the second beggar: 5, 7 and 3, as they will respectively take [1, 4], [2, 5] and [3].

Also note that not all beggars have to take the same amount of "offers", meaning that the length of the list is not necessarily a multiple of n; length can be even shorter, in which case the last beggars will of course take nothing (0).

Input

You will receive 2 lines of input: a single string containing the numbers separated by a comma and a space ", ". On the second line you will receive the number of beggars.

Output

Print a list of all the sums that each beggar got.

INPUT                  OUTPUT |         INPUT                      OUTPUT

1, 2, 3, 4, 5             [9, 6]      |         3, 4, 5, 1, 29, 4          [3, 4, 5, 1, 29, 4]

2                                           |        6

Тагове:
1
Fundamentals Module
ItsMomchilS avatar ItsMomchilS 28 Точки
Best Answer

Както и да е, намерих го. Тествах един код и работи 100/100. Ако искаш ми прати твоя код да го погледна и да ти кажа къде е проблема.

П.С. Наистина е доста объркващ, но главно като зациклиш с такива задачи търси в интернет. Винаги има отговори!

Ето го кода ми:

numbers_list = [int(x) for x in input().split(", ")]
number_of_beggars = int(input())

beggars_list = [0] * number_of_beggars

for num in range(len(beggars_list)):
    current_beggar = num
    for n in range(len(numbers_list)):
        current_num = n % number_of_beggars
        if current_num == current_beggar:
            if beggars_list[num] == 0:
                if numbers_list[n] == 0:
                    beggars_list[current_num] = 0
                    break
                beggars_list[current_num] = numbers_list[n]
            else:
                beggars_list[current_num] += numbers_list[n]

print(beggars_list)
0
25/10/2020 15:28:38
Antoan.Stefanov avatar Antoan.Stefanov 3 Точки

Понеже не мога да разбера този код , ка моли да го напиша , можеш ли да ми дадеш съвет какво да предприема като действие ?
Дебъгвам и дебъгвам , но не схващам логиката ... притесних се до известна степен , как да разбера кода ? 

0
ItsMomchilS avatar ItsMomchilS 28 Точки

Добре ще ти го обясня по-описателно. 

Правиш лист за първия input и ги разделяш с ',' (чрез comprehension) , след това другия input се подразбира.: 

numbers_list = [int(x) for x in input().split(", ")]

Тази част прави в този случей един лист с толкова нули колкото са просяците, за да може сле това в loop-a да се пълнят в зависимост кой е под ред:

beggars_list = [0] * number_of_beggars

След това първия for цикъл прави така че да вземе всеки един от всички просяци, и current_beggar е равен на текущия просяк.:

for num in range(len(beggars_list)):
    current_beggar = num

Тук този for цикъл минава през листа със всички числа които трябва да се разпределят на просяците в зависимост от реда им. current_num проверява чрез %,

проверява дали е равно на 0, щом е равно на 0 значи се дели на сегашния просяк без остатък и това значи че е той. А другия if под него проверява дали този просяк има пари.

for n in range(len(numbers_list)):
    current_num = n % number_of_beggars
    if current_num == current_beggar:
След това следващия if проверя дали има пари. Защото ако няма това значи че листа с парите е свършил и на следващите просяци ще дава по 0.

В примерите има някой просяци, които са повече от парите и в този случеи е нужен този if.

if numbers_list[n] == 0:
    beggars_list[current_num] = 0
    break

Aко ли не то под него има там където да се добавят първите пари. Ето това.

beggars_list[current_num] = numbers_list[n]

И след това else е щом просяка вече е получавал пари да се добавят към онези.

else:
    beggars_list[current_num] += numbers_list[n]

И накрая принтира листа който трябва да е output-a на този код.

print(beggars_list)

 

Надявам се този път да беше по-добре обяснено. Ако има все пак нещо, което не е ясно ме питай! :)

 

0
01/11/2020 20:38:44
Antoan.Stefanov avatar Antoan.Stefanov 3 Точки

Много ти благодаря за обяснението , ще го разгледам утре на трезва глава ... (От следобед до сега ми се изпари акъла).
При объркани задачи с if-ове нямам особени проблеми , но при  вложените цикли - греда. 
Ако има нещо ще ти пиша отново ! :D 

0
Antoan.Stefanov avatar Antoan.Stefanov 3 Точки

Здравей , разбрах кое не ми е ясно , колкото и абсурдно да звучи ... Как се редуват просяците .
Явно не знам модулно деление как се случва , когато се дели малко на голямо число например 3 % 6  защо пак си е 3 ? По тази логика защо ни е модулното деление в задачата като 3 си остава , както 0 и 2 ,4 и 5. И защото модулното деление е на броя на просяците . И как се случва въртенето , когато имаме повече числа от просяците. Ако те са двама например и 5 числа, как модулното деление разпределя числата за всеки просяк ?

Очевидно глупави въпроси , но не разбирам логиката зад този ред . Може ли обяснение върху него ?

 

"current_num = n % number_of_beggars"

казваш , че ако е 0 то това е текущия просяк

Но ако цикъла за кой просяк се е завъртял , текущия става 1 така и остатъка чака 1 за да си паснат  или ? 

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.