Гарна фраза. А де межа? Як на мене, цінним є вміння писати ЗРОЗУМІЛІ програми. Незалежно від мови програмування. І практично всі мови це дозволяють робити (brainfuck не згадуємо). Просувати Пайтон в шкільне середовище можна. Але не забуваймо, що його "недолугість" організатори олімпіад оцінили: в багатьох випадках дають в 10(!) разів більше часу на отримання результату, порівняно з іншими мовами. Ви в цьому бачите високий сенс?
В попередный темі чудова задача з ноутбуками, демонструє недолугий Паскаль.
n = input() k = len(n) z =0 for m in range(len(n)-1): if n[m]<n[m+1] : n= n.replace(n, '',1) z=1 break
if z == 0: n= n.replace(n[k-1], '',1)
print (n)
Учню можна сказати, що в Пайтоні є спеціальна можливість, що робить змінні z,k зайвими:
n = input() for m in range(len(n)-1): ....if n[m]<n[m+1]:
........n= n.replace(n[m], '',1)
........break else: ...n = n[:-1] print (n)
працює конструкція for - else: крапки поставив бо при збереженні усе "зникає" до того ж "n" з "j" у квадратних дужках десь зникає під час збереження на цьому сайті ...
Додано (09.01.2018, 14:44) --------------------------------------------- Вважаю кур навчання для учнів https://dystosvita.gnomio.com/mod/page/view.php?id=2169 вдалим! Але - треба зареєстріватися та ще пошукати там Пайтон )) Сам курс непоганий, з іграми і таке інше. Призначено для дистанційного навчання...
Але - треба зареєстріватися та ще пошукати там Пайтон ))Сам курс непоганий, з іграми і таке інше. Призначено для дистанційного навчання...
Сделайте себе такие для школы в moodle, платить не надо, хозяйничаете сами как хотите. Зашел на С++ - справочно-информационный материал ни о чем. Где обучение?
В кафе мороженое продают по три шарика и по пять шариков. Можно ли купить ровно k шариков мороженого? Формат ввода Вводится число k (целое,положительное) Формат вывода Программа должна вывести слово YES, если при таких условиях можно набрать ровно k шариков (не больше и не меньше), в противном случае - вывести NO.
Спочатку городив город з умов, але для великих чисел тести не проходили Потім спробував, вийшло
Код
[color=#000000]k = int(input()) if k < 3 or k == 4 or k == 7: print("NO") else: print("YES")
замість "і" вийшло - "ы", замість "ї" - "ъ", замість апострофа - "ё", та й літера "є" була повернута в іншу сторону. Як на мене, давати дітям на початковому етапі возитися з Юнікодом - це помилка. Хоча, може я й помиляюсь... На Пайтоні вийшло щось таке: Код s=input() print (s.count('Э')+s.count('э')+s.count('Ы')+s.count('ы')+s.count('Ъ')+s.count('ъ')+s.count('ё')) s=s.replace('Э','Є') s=s.replace('э','є') s=s.replace('Ы','І') s=s.replace('ы','і') s=s.replace('Ъ','Ї') s=s.replace('ъ','ї') s=s.replace('ё',"'") print(s)
d ={ 'Э':'Є', 'э':'є', 'Ы':'І', 'ы':'і', 'ъ':'ї', 'Ъ':'Ї', 'ё':"'", 'Ё':"₴", } s=input() sum = 0 for key, value in d.items(): sum += s.count(key) s = s.replace(key, value) print(sum) print(s)
Зі знаком гривні не все так просто... Я зміг добути його натисканням Shift+правий Alt+3 (Linux Mint). Звичайно, тут питання до автора задачі. Треба дивитись, як сформульована умова.
А розв'язок гарний, бо справді "в стилі Пайтон". Цікава структура даних - словник.
Задача 9Заїзд в ЛКШОрганізатори Всеукраїнської Літньої Комп'ютерної Школи "ОЛІМП" організували централізований заїзд учасників з Кременчука в НОК "Ерудит". Для цього булозамовлено три автобуса, які одночасно під'їхали до залізничного вокзалу. Усіучасники швидко розподілились по автобусах. Старша вожата Марина Віталіївназ'ясувала, що кількість учасників ЛКШ в різних автобусах різна, і вона вирішилипересадити частину учнів так, щоб у кожному автобусі їх було порівно.Дороможіть Марині Віталіївні з'ясувати, яку найменшу кількість дітей потрібно пересадити. Формат вхідних даних:У першому рядку задано три натуральних числа, не більших за 100 - кількість дітей у першому, другому та третьому автобусах. Формат вихідних даних:Виведіть одне число - найменшу кількість дітей, яких потрібно пересадити. Якщо це зробити не можливо, то виведіть NO SOLUTIONS.ПрикладиВхідні дані Результат роботи 2 3 4 1 9 10 10 NO SOLUTIONS
розв'язання для будь якої кількості авто:
Цитата
in_bus = [int(i) for i in input('студенти у автах (через пробіл):').split()] middle = sum(in_bus)//len(in_bus)
if sum(in_bus)%len(in_bus): rez = 'NO SOLUTIONS' else: rez = sum([x-middle for x in in_bus if x>middle]) print(in_bus, " ", rez)
або у коротшому записі - для "фанатів" одного рядка....
in_bus = [int(i) for i in input('студенти у автах (через пробіл):').split()] middle = sum(in_bus)//len(in_bus)
rez = 'NO SOLUTIONS' if sum(in_bus)%len(in_bus) else sum([x-middle for x in in_bus if x>middle]) print(in_bus, " ", rez)
чи не гарно?!
Додано (11.01.2018, 14:00) --------------------------------------------- Давайте ще задачі!
Додано (12.01.2018, 23:05) --------------------------------------------- # На склад, который имеет форму прямоугольного параллелепипеда, привезли ноутбуки, упакованные в коробки. Каждая коробка также имеет форму прямоугольного параллелепипеда. # По правилам хранения коробки с ноутбуками должны быть размещены на складе с выполнением следующих двух условий: # Стороны коробок должны быть параллельны сторонам склада. # Коробку при помещении на склад разрешается расположить где угодно (с выполнением предыдущего условия), в том числе на другой коробке, но все коробки должны быть ориентированы одинаково # (т.е. нельзя одну коробку расположить “стоя”, а другую —“лежа”) # Напишите программу, которая по размерам склада и размерам коробки с ноутбуком определит максимальное количество ноутбуков, которое может быть размещено на складе. # Формат ввода # Программа получает на вход шесть натуральных чисел. Первые три задают длину, высоту и ширину склада. Следующие три задают соответственно длину, высоту и ширину коробки с ноутбуком. # Формат вывода # Программа должна вывести одно число — максимальное количество ноутбуков, которое может быть размещено на складе.
-- перевірте ідею рішення:
Цитата
x = [int(i) for i in input().split()] y = [int(i) for i in input().split()] subst = [0,1,2,1,2,0,2,0,1,0,2,1,2,1,0,1,0,2] rez = max( [x[0]//y[subst[3*i]]*x[1]//y[subst[3*i+1]]*x[2]//y[subst[3*i+2]] for i in range(6)]) print(rez)
Ось ще одна задача. Програмування складнувате, але можна просто "подивитися" ;-)
Пояснение:Есть натуральное число x, его можно представить как произведение двух натуральных чисел m и n (x=m*n). Далее x нужно заменить на m+n-2 (x=m+n-2). И это все необходимо выполнять, пока x не станет равно 1 Пример:В программу поступило число 6. 6=3*2 3+2-2=3 6=6*1 6+1-2=5
3=3*1 3+1-2=2 5=5*1 5+1-2=4
2=2*1 2+1-2=1 - x=1, останавливаемся (до единицы мы дошли за 3 замены) 4=2*2 2+2-2=2
Рішення на С# static int GetStepsCount(int x) { //Граничноеусловиевыхода if(x <=1)return0; //Делаемодиншагиприбавляемкнему return1+ Enumerable //Длявсех m от1докорняиз x .Range(1,(int)Math.Sqrt(x)) //Где m являетсяделителем x .Where(m => x % m ==0) //ВычислитьGetStepsCount .Select(m =>GetStepsCount(m + x / m -2)) //Ивзятьсрединихминимум .Min(); }
Рішення на Python: ___________________ from math import sqrt
def f(x): if x <=1: return 0 return 1 + min([ f(m + x // m - 2) for m in range(1,int(sqrt(x))+1) if x%m ==0]) _________________________ Так що всі мови однакові! Справа смаку.
Якщо чесно не все розумію і плаваю, y[subst[3*i]] що там все таки відбувається
Цей код робить точно те, що ваш алгоритм. тільки замість змінних дані загнані у списки рекомендую подивитись на дію коду у гарному інструменті http://www.pythontutor.com/live.html#mode=edit де під час покрокового виконання коду візуалізується що відбувається у пам'яті комп'ютера. це дуже корисно для учнів - бо наочно!
Довго коптив над задачею про сірники Теж умовний оператор
Вдоль прямой выложены три спички. Необходимо переложить одну из них так, чтобы при поджигании любой спички сгорали все три. Для того чтобы огонь переходил с одной спички на другую, необходимо чтобы эти спички соприкасались (хотя бы концами). Требуется написать программу, определяющую, какую из трех спичек необходимо переместить. Формат ввода Вводятся шесть целых чисел : l₁,r₁,l₂,r₂,l₃,r₃ –– координаты первой, второй и третьей спичек соответственно (0 ≤ lᵢ < rᵢ ≤ 100). Каждая спичка описывается координатами левого и правого концов по горизонтальной оси OX. Формат вывода Выведите номер искомой спички. Если возможных ответов несколько, то выведите наименьший из них. В случае, когда нет необходимости перемещать какую-либо спичку, выведите 0. Если же требуемого результата достигнуть невозможно, то выведите -1. Примеры
На цей раз допомогла наочна модель, дружина вирізала клаптики паперу їх пронумерувала та позначила, залилося тільки розміщувати Рішення не таке елегантне
Код
l1 = int(input()) r1 = int(input()) l2 = int(input()) r2 = int(input()) l3 = int(input()) r3 = int(input()) if 0 <= l1 < r1 <= 100 and 0 <= l2 < r2 <= 100 and 0 <= l3 < r3 <= 100: if (l1 <= r2 and l2 <= r1 and l2 <= r3 and l3 <= r2)\ or (l2 <= r1 and l1 <= r2 and l1 <= r3 and l3 <= r1)\ or (l2 <= r3 and l3 <= r2 and l3 <= r1 and l1 <= r3)\ or (l3 <= r2 and l2 <= r3 and l2 <= r1 and l1 <= r2)\ or (l3 <= r1 and l1 <= r3 and l1 <= r2 and l2 <= r1)\ or (l1 <= r2 and l3 <= r1 and l3 <= r2 and l2 <= r3): print(0) else: d1 = r1 - l1 d2 = r2 - l2 d3 = r3 - l3 if (l3 > r2 and d1 >= l3 - r2)\ or (l2 > r3 and d1 >= l2 - r3)\ or (l2 <= r3 and l3 <= r2): print(1) elif (l3 > r1 and d2 >= l3 - r1)\ or (l1 > r3 and d2 >= l1 - r3)\ or (l1 <= r3 and l3 <= r1): print(2) elif (l1 > r2 and d3 >= l1 - r2)\ or (l2 > r1 and d3 >= l2 - r1)\ or (l1 <= r2 and l2 <= r1): print(3) else: print(-1) else: print(-1)
Додано (17.02.2018, 01:06) --------------------------------------------- В PyCharm як і в будь-якій IDE є VCS Оскільки по-тихенько вивчаю Python виникла ідея викладати розв'язки завдань на який небудь-сайт, без зайвих рухів та ще й сторіками задач Згадав про генератор статичних сайтів Jekyll, який використовується на GitHub, Деплой вирішив зробити на https://www.netlify.com/, більше можливостей Для швидкого пошуку по сайту підключив algolia.com, набереш слово задачі, видасть результат без натискань Окремо зробив сторінку з розділами задач та ЧаПи Для себе згодиться у роботі, звичайно як завжди є нудна робота набити попередні задачі
Додано (17.02.2018, 02:36) --------------------------------------------- Записав процес додавання умови задачі тобто Push
Додано (14.03.2019, 12:38) --------------------------------------------- Може хто вирішував задачу про ханойські вежі методом рекурсії Перекладав диски довго, відповідь то сходиться, але залишилися питання, наприклад чого так довго рахує Чи варто давати цю задачу на уроці в старших класах
n - кількість дисків, a - номер диску b- стовп якого знімаємо с- стовп на який надіваємо
Код
def hanoi(n, a, b, c): if n > 0: hanoi(n - 1, a, c, b) print(n, a, b) hanoi(n - 1, c, b, a) return n, a, b
n = int(input()) a, b, c = 1, 3, 2 hanoi(n, a, b, c)
Пайтон - повільна мова, інтерпретатор. Спробуйте запустити цю рекурсію на С, або Паскалі - буде швидше. Можливо є більш оптимальніші алгоритми розв'язку цієї задачі по часу.
Доброго дня! Допоможіть порадою, щось не врахувала при розв'язуванні задачі. на e-olimp один з тестів не проходить. Визначити в скількох точках перетинаються два кола.
from math import sqrt x1, y1, r1, x2, y2, r2 = map(int, input().split()) l=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(x2-x1)) if x1==x2 and y1==y2 and r1==r2: print('-1') elif l>r1+r2 or r1>l+r2 or r2>l+r1: print('0') elif l==r1+r2 or r1==l+r2 or r2==l+r1: print('1') else: print('2')
Зараховує на 86%, Тест #4Помилка виконання Буду дуже вдячна за зауваження!!!
Дано квадрат зі стороною А ( 1 ≤ A ≤ 10 18 ), у який вписано рівнобедрений трикутник. Визначте площу цього трикутника. Вхідні складаються з одного рядка, в якому записане єдине дійсне число – A . Введіть одне число – площу трикутника.
Дано квадрат зі стороною А ( 1 ≤ A ≤ 10 18 ), у який вписано рівнобедрений трикутник. Визначте площу цього трикутника.
Якщо умова задачі саме така, як Ви сформулювали, то задача не має розв'язків. Якщо ж глянути на умову на e-olimp (там є малюнок), то це інша умова задачі. Тоді це буде одним рядком так: print((float(input())**2)/2)