 |
Вітаю Вас, Гість · RSS |
 |
Розв'язки олімпіадних задач
| |
SLKuty |
Дата: Пн, 18.05.2015, 23:05 | Повідомлення № 1 |
Монтажер
Повідомлень: 833
| Я, на жаль, не маю часу щоб розв'язувати всі олімпіадні задачі, але деякі розв'язав і розмістив на своїй сторінці. Планую по трохи додавати. Поки що дивіться те що є. http://lidersite.com/%d0%be%....rmatyky
|
|
| |
Пилипчук_О_П |
Дата: Вт, 19.05.2015, 00:14 | Повідомлення № 2 |
Ветеран спілкування
Повідомлень: 4332
| Корисне починання.
Деякі технічні зауваження: 1) для зручності тестування в програму вставлені мітка та оператор goto... і після цього програма стала непридатною для автоматизованої перевірки. А саме такі системи перевірки використовуються на більшості олімпіад і онлайнових ресурсів. Таких речей слід уникати і ні в якому разі не привчати до цього учнів. Бували випадки, коли учень під час обласної олімпіади щось подібне дописав до своєї робочої (!) програми, внаслідок чого програма не пройшла жодного тесту. Результат - 0 балів за задачу. 2) команди на кшталт writeln (‘введіть початкову годину і хвилину через пробіл’); також неприйнятні для більшості олімпіад, оскільки програма виводить дані, не передбачені умовою. В умові сказано: "Вихідні дані: ви виводите на екран одне число — кількість ударів, які зробив годинник за цей відрізок часу". А насправді програма супроводжує число ще декількома текстовими рядками. Наслідок - 0 балів за задачу.
P.S. Продублював ці зауваження в коментарі на сторінці з розв'язками. Так зацікавлені вчителі й учні швидше їх знайдуть
Відредаговано: Пилипчук_О_П - Вт, 19.05.2015, 00:21 |
|
| |
beregok |
Дата: Вт, 19.05.2015, 09:48 | Повідомлення № 3 |
Прописаний назавжди
Повідомлень: 316
| Нещодавно почав потроху освоювати Python Спробував розв’язати задачу про кількість ударів годинника від SLKuty
Цитата """ Biy starovinnogo godynnika """ import sys s1=0 s2=0 s12=0 h1 = int(sys.argv[1]) # Pochatkova ujlbna, vge probiv h2 = int(sys.argv[2]) # Kinceva goduna, bude bytu
for i in range(12): i=i+1 s12=s12+i s12=s12 # Kilkist udariv za 12 godun = 78
if h1<13: # Perevirka godun for i in range(h1): i=i+1 s1=s1+i else: for i in range(h1-12): # Yakcho bilshe 12 i=i+1 s1=s1+i s1=s1+s12 # + 78 udariv if h2<13: for i in range(h2): i=i+1 s2=s2+i else: for i in range(h2-12): i=i+1 s2=s2+i s2=s2+s12 print s2-s1 # rezultat riznuca vidbutuh godun
Начебто вийшло, якщо щось не так порадьте
|
|
| |
swetikccc |
Дата: Вт, 19.05.2015, 10:08 | Повідомлення № 4 |
Ветеран спілкування
Повідомлень: 4208
| summa := 0; // зайва команда так як сума на початку програми автоматично=0
Вважаю коментар помилкою, потрібно привчати до ініціалізації змінної.
|
|
| |
Newbie |
Дата: Вт, 19.05.2015, 14:35 | Повідомлення № 5 |
Хелпер
Повідомлень: 1414
| Цитата beregok (  ) розв’язати задачу про кількість ударів годинника від SLKuty по самому розв'язку - я не зовсім розумію, який у Вас алгоритм, бо те, що я запускаю дає неправильні відповіді, включно з від*ємними. по ідеї: є 12-годинний цикл (78 ударів), від яких віднімаються ті, котрі йдуть до початкової години і після кінцевої? але якось багато не враховується
по Python: якщо потрібно створити цикл з лічильником для послідовності чисел 1-h1 (включно), і з тими числами виконувати якісь операції, то краще писати не for i in range(h1): i=i+1 s1=s1+i а for i in range(1,h1+1): s1+=i +1 тут потрібно, щоб включити значення h1
ну і раз я вже розібралась з задачею то даю свій код з "блондинистими" коментарями (бо всі галуження і цикли прокоментовані з конкретних прикладів, що звичайно "неправильно", зате наочно ) upd. додана ще одна умова
і до речі, я щось не знаю, чи є можливість(і потреба) розрізняти введення в один рядок чи в кілька?
Відредаговано: Newbie - Вт, 19.05.2015, 17:39 |
|
| |
beregok |
Дата: Вт, 19.05.2015, 18:02 | Повідомлення № 6 |
Прописаний назавжди
Повідомлень: 316
| Дякую Вам за допомогу!
Це моя третя програма на Пайтоні (Як правильно Пайтон чи Пітон?)
Мої міркування були такі, та на жаль, теорія не зійшлася з практикою: Водимо значення годин що пройшла h1 та буде h2 (пройшло 11 буде 13) Обчислюю кількість ударів за 12 годин, це буде 78 Перевіряю значення h1 якщо менше дванадцяти обчислюємо кількість кількість ударів s1 Інакше обчислимо кількість ударів і додамо 78, адже після 12 години знову буде 1, 2... ударів Перевіряю значення h2 якщо менше дванадцяти обчислюємо кількість кількість ударів s2 Інакше обчислимо кількість ударів і додамо 78, адже ... ... Обчислюємо різницю ударів між h2 і h1, s2-s1
Запускав програму так: capricornus@capri:~/work.py$ python kurantu.py 23 13 Тобто значення вводив через пробіл
Дізнався що значення можна вводити в інтерактивному режимі Наприклад: def text_prompt(msg): try: return raw_input(msg) except NameError: return input(msg)
h1 = int(raw_input('input h1:')) h2 = int(raw_input('input h2:'))
Багато чого не знаю в Пайтоні, наприклад функцію, що вона робить: elif h1>h2: можна детальніше
А ще однією задачею заморочився(2 задача). Обчислити n-значення числа послідовності Фібоначчі Що роблю не так не знаю, начебто щось працює та не проходить онлайн перевірку
""" fiboonachi """ import sys a=0 b=1 s=0 n = int(sys.argv[1])
for i in range(2, n + 1): s=a+b a=b b=s
print(s)
Відредаговано: beregok - Вт, 19.05.2015, 18:02 |
|
| |
Пилипчук_О_П |
Дата: Вт, 19.05.2015, 18:05 | Повідомлення № 7 |
Ветеран спілкування
Повідомлень: 4332
| Цитата Newbie (  ) я щось не знаю, чи є можливість(і потреба) розрізняти введення в один рядок чи в кілька? Щодо цього вибір мови має значення. Там де в одних мовах можна вводити майже як попало (Паскаль), в інших можуть виникати проблеми. Експериментуючи з Python'ом бачив, що фрагмент для читання чисел з одного рядка, відокремлених пропуском, працював некоректно, якщо вводити в декількох рядках. Ознайомлення було досить поверхневе (з десяток задач), тому, якщо хтось знає глибше, прошу поділитись.
Щоб повернутись до теми гілки пропоную одну зі своїх спроб аналізу задачі (6-річної свіжості ): http://teachlab.ucoz.ua/publ/15-1-0-33
|
|
| |
SLKuty |
Дата: Ср, 20.05.2015, 23:00 | Повідомлення № 8 |
Монтажер
Повідомлень: 833
| Пайтон, звичайно цікава і сучасна мова програмування, але на олімпіадах напевно не використовується. Так само, як Java, або Delphi у візуальному режимі. Можливо нова влада прийме якісь закони більш демократичні щодо вибору мови програмування. Ніби там наверху щось зрушується з мертвої точки і інформатику стануть називати - програмуванням, якщо всі проголосують "за"
|
|
| |
Пилипчук_О_П |
Дата: Чт, 21.05.2015, 08:50 | Повідомлення № 9 |
Ветеран спілкування
Повідомлень: 4332
| Цитата SLKuty (  ) Можливо нова влада прийме якісь закони більш демократичні щодо вибору мови програмування. А чим старі погані? Якщо серйозно, то цілком логічним є орієнтувати шкільну/районну/обласну/всеукраїнську олімпіади на вимоги міжнародної.
|
|
| |
Пилипчук_О_П |
Дата: Сб, 08.02.2020, 23:40 | Повідомлення № 10 |
Ветеран спілкування
Повідомлень: 4332
| Написав розбір своєї задачі, яка пропонувалась на Хмельницькій заочній олімпіада 2020. Розв'язок на Free Pascal, об'єктноорієнтований: https://teachlab.ucoz.ua/publ....1-0-135
|
|
| |
Пилипчук_О_П |
Дата: Вт, 11.02.2020, 14:32 | Повідомлення № 11 |
Ветеран спілкування
Повідомлень: 4332
| А тепер - розбір цієї самої задачі мовою Python: https://teachlab.ucoz.ua/publ....1-0-138
|
|
| |
Пилипчук_О_П |
Дата: Пн, 24.02.2020, 00:38 | Повідомлення № 12 |
Ветеран спілкування
Повідомлень: 4332
| Ця ж задача - мовою C#:
https://teachlab.ucoz.ua/publ....1-0-139
Плюс ідея покращення алгоритму.
|
|
| |
© Форум інформатиків України, 2007-2023.  |