Підготовка до олімпіади

Програмування (Python)

Списки

#Зчитування з файлу

#---------------------

#Вміст файлу:

#10

#---------------------

file=open('input.txt','r')

f=file.readlines()

f[0]=f[0].rstrip("\n")

N=int(f[0])


d=10

q=1

p=0

M=0

while p<N:

M=M+1

if M==d:

q=q+1

d=d*10

p=p+q

print('p=',p) #Виведення результату


#При n=10 результ p=11 - кількість застосованих цифр для нумерації сторінок від 1 по M

Середнє з чисел

Дано три різних числа a, b, c. Вивести середнє з них

#Зчитування з файлу

#---------------------

#Вміст файлу:

#10 54 7

#---------------------

file=open('input.txt','r')

f=file.readlines()

f[0]=f[0].rstrip("\n")

f=f[0].split(' ')

a=int(f[0])

b=int(f[1])

c=int(f[2])

s=(a+b+c)-(max(max(a,b),c)+min(min(a,b),c))

print(s)


#Результат: 10

Оптимальна купівля CD

Чисті компакт-диски продаються в різних упаковках: більша у 100 дисків коштує 100 грн, менша у 20 дисків - 30 грн, а один окремий диск коштує 2 грн. Якої мінімальної суми має вистачити для покупки N таких дисків?

#Зчитування з файлу

#---------------------

#Вміст файлу:

#235

#---------------------

file=open('input.txt','r')

f=file.readlines()

f[0]=f[0].rstrip("\n")

n=int(f[0])

a=n//100

n=n%100

b=n//20

c=n%20

x=a*100+b*30+c*2

y=a*100+(b+1)*30

z=(a+1)*100

if y<x:

x=y

if z<x:

x=z

print(x)


#Результат: 260

Кількість днів

Дано дві календарні дати. Знайти кількість днів між ними, включаючи початковий і кінцевий дні.

def Year(y):

year = 0

if y % 4 == 0 and y % 100 != 0 or y % 400 == 0:

year = 1

else:

year = 0

return year


def Month(m,y):

w = 31

if m == 2:

w = 28 + Year(y)

if m == 4 or m == 6 or m == 9 or m == 11:

w = 30

return w


def Count(d,m,y):

s = 0

for i in range(1,y):

s += 365 + Year(i)

for x in range(1, m):

s += Month(x, i)

s += d

return s


date_1 = input("Введіть 1 дату в форматі: '12.12.2022': ").split(".")

date_2 = input("Введіть 2 дату в форматі: '12.12.2022': ").split(".")


for i in range(3):

date_1[i] = int(date_1[i])

date_2[i] = int(date_2[i])


riz = Count(date_2[0],date_2[1],date_2[2]) - Count(date_1[0],date_1[1],date_1[2])+1


print(riz)

Модель годинника з боєм

Годинник з боєм відбиває кожної години таку кількість ударів, скільки їх є на циферблаті з цифрами від 1 до 12, та по одному разу тоді, коли хвилинна стрілка вказує на цифру 6. Знаючи початковий та кінцевий час однієї календарної доби (в годинах і хвилинах), обчислити загальну кількість ударів за цей проміжок часу.

#Уведення даних

chas1=input('Час перший (год.хв.)')

chas2=input('Другий перший (год.хв.)')

chas1=chas1.split(':')

chas2=chas2.split(':')

g1=int(chas1[0])

h1=int(chas1[1])

g2=int(chas2[0])

h2=int(chas2[1])

#Основна частина програми

c=0

t1=g1*60+h1

t2=g2*60+h2

for l in range(48):

t=l*30

if l%2!=0:

u=1

else:

u=(l%24)//2

if u==0:

u=12

if t1<=t and t<=t2:

c+=u

#Виведення результатів

print('Кількість ударів годинника: ', c)

Нулі в кінці запису N!

Підрахувати кількість нулів в кінці запису факторіала натурального числа N (N<=2*10^9)

нулі в кінці запису N факторіал.pdf

#Функція

#Підраховує кількість дільників 5 заданого числа

def Dil5(m):

d=0

while m%5==0:

m=m//5

d+=1

return d

#Основна частина програми

n=int(input('N=?'))

k=0

for i in range(1,n+1):

k=k+Dil5(i)

print(k) #Кількість нулів в кінці запису факторіала заданого числа n

n=int(input('N=?'))

k=0

while n!=0:

n=n//5

k=k+n

print(k)

Симетрія чисел

Скільки існує N-значних паліндромів? (Паліндром - це число, що читається однаково в обох напрямках). N=1...1000.

симетрія чисел.pdf

def Back(x):

y=0

while x!=0:

y=y*10+(x%10)

x=x//10

return y


n=int(input('n=?'))

b=1

for i in range(1,n+1):

b=b*10

a=b//10

b=b-1

m=0

for i in range(a,b+1):

if i==Back(i):

m+=1

print(m)

Популяція роботів

A роботів за рік збирають C роботів, а B роботів - D роботів. На початку є N роботів. Яка найбільша кількість роботів може бути через K років?

def robot(r,a,b):

m=0

for x in range(r//a+1):

for y in range((r-a*x)//b+1):

if x*c+y*d>m:

m=x*c+y*d

return m


a=int(input('a='))

b=int(input('b='))

c=int(input('c='))

d=int(input('d='))

n=int(input('n='))

k=int(input('k='))

for i in range(1,k+1):

n=n+robot(n,a,b)

print('n=',n)