Здравейте! Това е цялата задача:
We have the following operations defined for two-digit numbers. There are two possible ways of merging them:
- Merging
ab
and cd
produces bc
42
merged with 17
produces 21
17
merged with 42
produces 74
- Squashing
ab
and cd
produces a(b+c)d
- the middle digit is the sum of b
and c
42
squashed with 17
produces 437
39
squashed with 57
produces 347
(9 + 5 = 14
, we use only the 4
)
You have a sequence of N
two-digit numbers. Your task is to merge and squash each pair of adjacent numbers.
Input
All input data is read from the standard input
- On the first line, you will receive an integer
N
- On the next
N
lines you will receive N
two-digit numbers
- Each number will be on a separate line
Output
The output data is printed on the standard output
- On the first output line print the merged numbers
- There should be
N - 1
of them
- Separate them by spaces
- On the second output line print the squashed numbers
- There should be
N - 1
of them
- Separate them by spaces
Constraints
- 2 <=
N
<= 1000
- Numbers will consist of two non-zero digits
- The input data will always be correct and there is no need to check it explicitly
По отношение на Merge, написах код:
но ми се струва много сложен. Моля Ви за помощ за по-просто решение. Благодаря!
Здравей!
Това, което ми хрумва на мен (това не значи, че е единствения начин или даже, че е добър) е в един цикъл първо да си добавиш всичките “числа” към един списък. И после в друг цикъл да почнеш да обхождаш този списък. В този цикъл, просто вземаш втория символ от първото “число” и първия символ от второто “число” и ги “залепяш” и така ще получиш първото merge-нато число и него го добавяш към някакъв списък с merge-натите числа. След това ги събираш тези същите “числа”, но не забравяй, че ако сбора надхвърля 9 трябва по някакъв начин да вземем само втората цифра. И като вземем първия символ на първото “число”, сбора от тези двете и втория символ от второто “число” и ги слепим всичките би трябвало да получим и резултата от sqaush-ването, който можем да добавим в друг списък. И т.н. докато не ни свършат числата в списъка.
Поздрави,
Коко
Здравей,
Твоят начин е чрез итериране по цифрите на въведените числа е по-лесен и го направих. Сега се мъча да приложа итерацията със Squashing
Поздрави,
Петър
Здрасти,
Прилагам примерно решение с функции и малко List Comprehension за алтернативен подход.
Коментираният код помага за генериране на 1000 рандом двуцифрени числа, несъдържащи цифрата 0, за помощ при тестване на бързина примерно.
Много ти благодаря! Аз се справих с помощта на идеята на Коко и със Squashed модула. Ще разгледам внимателно и ако имам въпроси ще те питам.
Поздрави,
Петър
Здравей! Много елегантно решение с няколко реда и само един цикъл. Моето решение мина в джъдж, но е доста по-дълго, защото има два цикъла - по един за Merged и Squashed. Явно дефинирането на функции е много мощен инструмент, но не съм стигнал дотам и затова няма да задавам излишни въпроси. :)Стигнах обаче до извода, че подготовката за Alpha program exam изисква поне един месеца сериозно решаване на задачи.
Поздрави,
Петър