Задачи - УПП, Седмица 13, 12.01.2024
GitHub classroom: classroom.github.com/a/bgiFD6SB
Алтернативни задачи
#Считайте задачите от семинара и тези от миналия път като част от днешните задачи. Тоест, за хората които се затрудняват повечко, решете ги и след това се върнете тук. Разбира се, ще помагам и с тях.
1 задача
#От входа получавате число N, това е броя на “пробни” думи. След тях получавате още една дума, която е желаната дума. Трябва да изкарате коя пробна дума е най-близка до (различава се с най-малко знаци с) желаната дума.
Всяка дума е на нов ред и е съставена от малки латински букви. Ако има няколко думи с еднаква “близкост”, изкарайте последната от тях.
Примери:
Вход | Изход |
---|---|
5 cate cot dog cote co cat |
cot |
4 nask nmaskl msdal task mask |
task |
2 задача
#В началото получавате неотрицателно цяло число N. След това получавате N на брой редове. Всеки ред е във формата “(Име) (Фамилия) (Брой продадени продукти)”.
Редовете са разбъркани, изкарайте първо име и фамилия на хората с най-много продадени продукти. Ако има няколко хора, които са продали най-много продукти, изкарайте имената им в азбучен ред, първо по фамилия, после по име.
Използвайте само една функция за сортиране! Като подсказка, използвайте указатели към функции за да променяте как тя работи.
Какво свойство трябва да е изпълнено за сортиращата функция?
Примери:
Вход | Изход |
---|---|
Antony Garcia 10 John Doe 9 Joseph Carmichael 10 Steven Wayne 1 Bob Carmichael 10 Holy Wilson 9 |
Bob Carmichael Joseph Carmichael Antony Garcia |
3 задача
#Ще дефинираме обвито изречение, като редица от букви, за които са изпълнени следните правила:
първата е главна
последната е точка
между тях има само малки букви, цифри и шпации
всяко изречение е “обвито” до някакъв брой колони
Тоест за всяко изречение са избрани максимален брой колони, и знаците са обвити, така че да се поберат. Примерно, ако имахме изречението “Hello world.” и бяхме избрали 5 колони, тогава получаваме:
Hello worl d.
От входа получавате N и M, те съответстват на матрица от символи с N реда и M колони. В матрицата имате обвити изречения, подредени по такъв начин, че между съседни има със сигурност поне една шпация (която действа като разделител). Допускаме, че при “двусмислици” възможно най-много шпации са част от изречението (а не от разделителя), тоест ако имаме:
A B
. .
тогава двете ни изречения са:
B.
A .
Изкарайте на конзолата всички обвити изречения в матрицата (редът им няма значение).
Примери:
Вход | Изход |
---|---|
7 13 |
Something. An. This is cool. Hello. Good luck. Ha. |
2 7 |
A. |
3 7 |
A. |
4 7 |
A. |
3 6 |
Big jumper. |
4 задача
#В префиксния (или полския) запис слагаме оператора за смятане пред (в ляво от) елементите върху които работи (нормален запис - 1 + 2
, полски запис - + 1 2
).
Ще разглеждаме “многоредови” изрази в полски запис, тоест изрази в които има няколко реда от целочислени стойности, така че трябва да се изчислят няколко израза с еднаква “форма”, но различни стойности.
Един такъв израз изглежда така:
+ 1 2
3 4
5 6 .
Точката на края на последния ред задава край на израза.
В този пример ще изчислим 1 + 2
, 3 + 4
и 5 + 6
, тоест ще “върне” три стойности: 3, 7 и 11.
Всяка колона в израза е от един и същи “тип”, тоест в една колона винаги ще има числова стойност или някакъв знак.
С изключение на точката, всеки знак може да се постави на произволен ред (обаче в една колона не може да има повече от един знак).
Примерно:
1 - 2 2 63
+ 3 4 7 7
5 6 * 8 9 .
Това ще изчисли 1 + (2 - 2 * 63)
, 3 + (4 - 7 * 7)
и 5 + (6 - 8 * 9)
.
Израза би направил същото нещо ако примерно всички знаци бяха на първия ред или на последния.
От входа получавате няколко такива израза, докато не получите знака $
.
Може да достъпвате стойност от предходни изрази чрез синтаксиса “ИНДЕКС.ИНДЕКС”, където индексите са от 0, първия определя номера на израза, докато втория определя коя стойност искаме. Примерно:
1 2
+ 3 4
5 6 .
* 0.0 0.2 .
В последния израз умножаваме от нулевия израз, първата и третата стойност, тоест умножаваме 3 и 11.
Накрая трябва да изкарате всички стойности от последния израз.
Погледнете пояснението за вход/изход от последната задача от миналия път.
Пример:
Вход | Изход |
---|---|
1 5 |
-3 -36 -20 |