Loading...
vkachanov avatar vkachanov 17 Точки

[Programming Basics] Задача 6 от изпита на 07 Май 2017 - възможна грешна интерпретация на условието

Здравейте,

след като изкарах Programming Basics на Java, реших да си реша изпита и на C#. Стигайки до задача 6 реших да я реша по друг начин от този, който използвах на изпита и установих, че е възможно условието да бъде подвеждащо за някой. Там пише "Да се напише програма, която прочита от конзолата три цели числа M, N и L, и генерира всички числа в диапазона от MNL до 111".

Нека вземем за пример числата в първият нулев тест - М = 9, N = 7 и L = 3. Четейки буквално условието трябва да генерираме числата от 973 до 111. Можем да го направим като преобразуваме входните 3 числа до 1 трицифрено (в случая 973) и пуснем един обратен (намаляващ) for-цикъл от трицифреното число (в случая 973) до 111. Това ще генерира следната поредица от числа: 973, 972, 971, 970, 969 и т.н., върху които със if-проверки да извършим останалите манипулации описани в условието.

Това решение, макар и следващо условието цитирано по-горе се счита за грешно от judge. За да стигнем до верните отговори трябва да направим 3 цикъла, които съответно броят от М до 1, от N до 1 и от L до 1. Това обаче генерира следната поредица от числа (пак спрямо горния пример): 973, 972, 971, 963 , 962, 961, 953, 952, 951 и т.н., което може да се счете за не много отговарящо на цитираното условие, защото пропуска доста от числата между 973 и 111.

Та това е, ако автора на задачата прочете това може да реши, че условието трябва да се поправи, а може и аз да не го тълкувам правилно сега, след като на изпита си го реших по правилния за judge начин и даже не ми хрумна другото тълкование.

Приятна вечер

Тагове:
1
Programming Basics 29/05/2017 16:24:58
simeon3000 avatar simeon3000 264 Точки

На мен също не ми хрумна това по време на изпита, защото знаех че последната задача ще е с вложени цикли :)

"Малко" са смесили понятията цифри и числа.

Ето така би било по- коректно условието: "Да се напише програма, която прочита от конзолата три цифри M, N и L, и генерира всички числа с тези цифри в диапазона от MNL до 111".

1
vkachanov avatar vkachanov 17 Точки

Наистина е малко по-коректно, но не напълно, защото казвайки "да генерира всички числа с тези цифри" би означавало да ползваме само тези цифри, а  в и двата горни подхода се генерират числа, в които има и други цифри (2, 6, 5 и т.н. при вход 9,7,3). 

0
simeon3000 avatar simeon3000 264 Точки

То "лошото" е, че ако се напише напълно коректно условие, с обяснения и т.н., задачата ще е наполовина решена :)

0
vkachanov avatar vkachanov 17 Точки

И това е вярно...smiley

0
Ivanov.Ivan avatar Ivanov.Ivan Trainer 558 Точки

По принцип има още нещо което пропускате. В задачата е казано, че числата ще са в интервала от 1 до 9. Следователно ако решаваме с 1 for цикъл и ако някое от числата хитне стойност извън този интервал, то тя е невалидна.

0
vkachanov avatar vkachanov 17 Точки

И това е вярно - ако използваме 1 for-цикъл генерираме числа, които съдържат 0, което не отговаря на условието. Тоест, и двата подхода нарушават условието.

Може би трябва да е нещо като "Да се напише програма, която прочита от конзолата три цифри – M, N и L, и генерира всички трицифрени числа в диапазона от M(стотици)N(десетици)L(единици) до 111, получени чрез намаляване на М, N и L  до 1". (така май стана съвсем забатачено).

Карай, нали я решихме на изпита wink.

0
fbinnzhivko avatar fbinnzhivko 1586 Точки

Колега vkachanov бях направил тема за тази задача заради неясното условие.
Махнаха я от форума защото беше неудобна.
Затова спрях да пиша във форума.

0
vkachanov avatar vkachanov 17 Точки

Не знаех за другата тема, но не виждам какво и е неудобното - просто размишления върху условието на една задача. Както казах на изпита си я реших без въобще да ми хрумне друга интерпретация.

 

0
JivkoJelev avatar JivkoJelev 235 Точки

А всъщност от 971 как цикъла отива на 963 ? За 0-те разбрахме че се изключват , но как прескача цикъла и в какви ситуации?

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