24.11.Analiza prvog zadatka sa takmičenja - Sudar brojeva
Klik da prikažete/sakrijete tekst zadatka
Судар бројева
| Vremensko ograničenje | Memorijsko ograničenje | ulaz | izlaz |
|---|---|---|---|
| 0,1 s | 32 MB | standardni ulaz | standardni izlaz |
Мала Даница, потпуно револтирана одлуком Комисије да ове године укине један круг квалификација, кренула је да разбија све око себе, укључујући и бројеве који јој падну под руку. Наиме, када угледа два природна броја она баци један број на други тако да се бројеви сударе. Сударом два броја, настаје нов природан број.
Приликом судара два природна броја X и Y, свака цифра једног броја упоређује се с одговарајућом цифром другог броја, то јест, јединица се упореди с јединицом, десетица с десетицом, стотина са стотином, итд. Мања од две цифре у том поређењу испадне, док већа улази у састав новоформираног броја. Уколико су одговарајуће цифре једнаке, приликом судара обе улазе у новостворени број те ће стога он имати више цифара од X и Y. Уколико у неком од два природна броја која се сударају нема одговарајуће цифре, сматра се да та цифра не постоји те се без поређења увек узима цифра другог броја, па макар она била и нула.
Пошто је бројева превише, мала Даница не може сама да се избори с њима, па вас је замолила да јој помогнете тако што ћете сударати бројеве заједно с њом. Да бисте то учинили морате одговорити на питање који ће се број створити приликом судара два природна броја?
Опис улаза
У првом реду стандардног улаза се налазе први природан број X, док се у другом реду стандардног улаза налази други природан број Y . Ова два природна броја треба сударити на начин описан у тексту задатка.Опис излаза
У једином реду стандардног излаза исписати новостворени број који се добија приликом судара два броја са улаза.
Пример 1
73 28
Излаз 78
Пример 2
Улаз
64
357
Излаз 367
Пример 3
Улаз
234
135
Излаз 2335
Пример 4
Улаз 99099
9999
Излаз 99999999
Пример 5
Улаз 2
100
Излаз 102
Објашњења примера
У првом примеру се сударају бројеви 73 и 28. Оба броја су двоцифрена, те се међусобно упоређују цифре десетица, односно 7 и 2, и цифре јединица, односно 3 и 8, и од већих цифара ствара се нови број који има вредност 78, пошто је 7 веће од 2, а 8 веће од 3.
У другом примеру сударају се бројеви 64 и 357. Први број је двоцифрен, а други троцифрен, па се стога цифра стотина, 3, преузима из већег броја. Затим се приликом судара међусобно упоређују цифре десетица, 6 и 5, као и цифре јединица 4 и 7, и од већих цифара формира се нови број који има вредност 367, пошто је 3 преузето, а 6 веће од 5 и 7 веће од 4.
У трећем примеру сударају се троцифрени бројеви 234 и 135. Међусобно се упоређују цифре стотина, 2 и 1, цифре десетица 3 и 3, и коначно цифре јединица 4 и 5. Поред одговарајућих већих цифара које сачињавају нов број, а то су цифре 2 и 5, у састав новог броја улазе и све међусобно једнаке цифре на одговарајућим местима, односно у овом конкретном случају обе цифре 3 с места десетица, па је вредност новоствореног броја 2335.
У четвртом примеру сударају се бројеви 99099 и 9999. Како је први петоцифрени, а други четвороцифрени, пореде се четири најниже цифре, а по највиша се цифра преузима из првог броја. Приликом упоређивања постоје само два случаја: у првом се пореди 9 и 0 те се у новоформираном броју преноси једна деветка, а у другом случају се пореди 9 и 9 па у новостворени број улазе обе деветке. Стога је резултат судара 99999999 јер у два почетна броја имамо укупно осам деветки и све оне улазе у састав резултујућег броја.
Најзад, у петом тест примеру сударају се бројеви 2 и 100. Пошто је први број једноцифрен, а други троцифрен, то се прве две цифре 1 и 0 свакако преузимају из другог броја, а у поређењу цифара јединица, 2 је веће од 0, те се коначно добија вредност 102.
Ограничења
- 1≤X,Y≤109
Jedan način rešavanja zadatka je već postavljen na platformi:
( Link ka rešenjima zadataka : https://algora.petlja.org/t/2022-2023/7670 )
Najčešća greška koju su učenici pravili je pretpostavka da se koriste samo celi brojevi (int) ...
Podsetimo se da se sa 32-bitnim celim brijevima može prikazati broj od oko ±2 x 109
Ako pretpostavite da radite samo sa celim brojevima, ograničeni ste na vrednosti koje ne prelaze 10 cifara.
Ako malo bolje pogledate zadatak, videćete da se u najgorem mogućem slučaju može desiti da se na primer dobiju brojevi 1000000000 i 1000000000 odakle bi se kao rezultat dobilo 11000000000000000000 - broj sa čak 20 cifara!
VAŽNA NAPOMENA: Rezultati na Petlji, ulazi i izlazi NE MORAJU BITI SAMO CELI BROJEVI već možete raditi sa BILO KOJIM FORMATOM, dokle god se dobiju odgovarajuće cifre u rešanju!!!!!
Drugim rečima: ulazne podatke ne morate preuzeti kao cele brojeve, već možete da ih preuzmete kao string ili neki drugi format. Izlazne podatke ne morate predati kao cele brojeve već možete poslati string takođe (ili realan broj, short, long long, ... )
Ako imate u vidu prethodno rečeno, došli smo do jednog predloga jadnog od načina izrade ovog zadatka:
prvo:
preuzeti ih kao string - time odmah imate niz karaktera (string jeste niz karaktera)
drugo:
proveriti kolike su dužine tih stringova, pa ako je jedan duži od drugog, kao na primer:
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 4 | 3 | 2 | 1 | 8 |
treće:
ako je jedan string duži iz njega uzeti podstring, od početka, i dužine kolika je razlika u dužini stringova, i to smestiti u rezultantni string
zatim uzeti drugi podstring od indeksa jednakoj razlici dužine stringova pa do kraja stringa - recimo da je to str1 - prvistring, a str2 je onaj kraći string - drugi string
četvrto
Onda prolaziti kroz ta dva stringa (str1 i str2 ili prvi i drugi) - kroz for petlju na primer, proveravajući slovo po slovo
Da se podsetimo osnova: slova se mogu porediti po vrednosti, str1[i] > str2[1] će biti tačno ako je u prvom stringu na indeksu i brojka veća od brojke u drugom stringu na istoj poziciji !
Ako je jedno slovo (cifra- karakter - brojka) "veće" od drugog, onda je i cifra veća od druge - pa se to smešta u rezultantni string pomoću operatora +=
Ako su jednaki,onda se nadodaje u rezultantni string dvaput !
peto
Na kraju samo taj rezultantni string poslati na izlaz
Slika ilustracije sa table iz učionice:
