Задачи - УПП, Седмица 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
Thi A Someth
s i n ing.
s c .
ool
. Good Hel
luc lo.
Ha. k.
| Something. An. This is cool. Hello. Good luck. Ha. |
2 7 B A. . | A. B . |
3 7
A.
B
. | A. B . |
4 7
A.
B
. | A. B . |
3 6 Big jumper . | 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
+ 2 6
3 7
4 8 .
- 0.3 0.2 .
* 1.0 0.1 .
1.0 3 0.2 3
- 3 0.3 0.1 1.0
* 0.0 2.0 / 2.0 0.1 .
$
| -3 -36 -20 |