Професионална програма
Loading...
+ Нов въпрос
Tryhard avatar Tryhard 0 Точки

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

Тагове:
0
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 1 Точки

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

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 1 Точки

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

0
ItsMomchilS avatar ItsMomchilS 28 Точки

Здравей, можеш ли само да пратиш линк на задачата в judge?

Meрси!

0