Loading...
SimeonTsvetanov avatar SimeonTsvetanov 0 Точки

Python/ Lists/ 03. Sum Adjacent Equal Numbers

Здравейте, Колеги
Имам нужда от малко помощ за тази задача. Кода ми изкарва 90/100 в Judge.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 

Lists
Проверка: https://judge.softuni.bg/Contests/Practice/Index/423#2

03. Sum Adjacent Equal Numbers

Условие:
Write a program to sum all adjacent equal numbers in a list of decimal numbers, starting from left to right.
- After two numbers are summed, the obtained result could be equal to some of its neighbors and should be
summed as well (see the examples below).
- Always sum the leftmost two equal neighbors (if several couples of equal neighbors are available).
Examples
Input                       Output                             Explanation
3 3 6 1                    12 1                                 3 3 6 1  6 6 1  12 1
8 2 2 4 8 16            16 8 16                            8 2 2 4 8 16  8 4 4 8 16  8 8 8 16  16 8 16
5 4 2 1 1 4               5 8 4                               5 4 2 1 1 4  5 4 2 2 4  5 4 4 4  5 8 4

Hints
1. Read the input and parse it to list of numbers.
2. Find the leftmost two adjacent equal cells.
3. Replace them with their sum.
4. Repeat (1) and (2) until no two equal adjacent cells survive.
5. Print the processed list of numbers.
"""


nums = [float(item) for item in input().split(" ")]

i = 0
while i != len(nums):
if nums[i - 1] == nums[i]:
nums[i] = nums[i] + nums[i - 1]
nums.remove(nums[i - 1])
i = 0
i += 1

for num in nums:
print(num, end=" ")

Тагове:
0
Fundamentals Module
borator avatar borator 12 Точки
Best Answer

Здравей Симеон,
представил си много елегантно решение и в случай, че не си намерил как да го направиш 100/100 се надявам това да ти помогне:
in: 0.1 0.1 5 -5 out: 0.2 5 -5
in: 1                 out: 1
Позволих си да допиша кода ти.
 

def print_it(ns):
    for i in ns:
        if i - int(i) == 0:                
            print(int(i),end=' ')
        else:
            print(i,end=' ')
            
nums=list(map(float,input().split()))

if len(nums) == 1:
    print_it(nums)
else:
    i = 0
    while i != len(nums):
        if nums[i - 1] == nums[i]:
            nums[i] = nums[i] + nums[i - 1]
            nums.remove(nums[i - 1])
            i = 0
        i += 1
    print_it(nums)

 

0
SimeonTsvetanov avatar SimeonTsvetanov 0 Точки

Здравей, 
Благодаря за решението. 
Аз също се справих с по- друг подход:

nums = [float(item) for item in input().split(" ")]

i = 0
while i != len(nums):
    if len(nums) == 1:
        break
    f = nums[i - 1]
    s = nums[i]
    if f == s:
        nums[i] = f + s
        nums.remove(nums[i - 1])
        i = 0
    i += 1

if len(nums) <= 1:
    print(nums[0])
else:
    print(" ".join(map(str, nums)))

И хубав ден :)

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