e-olimp

3.Спичечная модель

Профессор Самоделкин решил изготовить объемную модель кубиков из спичек, используя спички для рёбер кубиков. Длина ребра каждого кубика равна одной спичке.

Для построения модели трех кубиков он использовал 28 спичек.

Какое наименьшее количество спичек нужно Самоделкину для построения модели из n кубиков?

Все числа в задаче не превышают 2·109.

Входные данные

Одно число n – количество кубиков в модели.

Выходные данные

Выведите наименьшее количество спичек необходимое для построения модели из n кубиков.

var n: longint;function kube(n: integer): integer;var c1,c2,c3,s,h,d1,d2: integer;begin c1:=trunc(exp(ln(n)*1.0/3)+0.5); c2:=trunc(sqrt(n/c1)+0.5); c3:=trunc(n/(c1*c2)); S:=3*c1*c2*c3+2*(c1*c2+c1*c3+c2*c3)+(c1+c2+c3); h:=n-c1*c2*c3;if h<>0 then begin d1:=trunc(sqrt(h)+0.5);if d1*d1>h then dec(d1); d2:=trunc(h/d1); S:=s+(3*d1*d2+2*(d1+d2)+1); h:=h-(d1*d2);if h<>0 then S:=s+(3*h+2);end;kube:=S;end;begin readln(N); writeln(kube(N));end.

2.Цифры

Вычислить количество цифр целого неотрицательного числа n.

Входные данные

Одно целое неотрицательное число n (0n2109).

Выходные данные

Количество цифр в числе n.

var n: longint; k:integer; beginread (n); if n mod 10=0 then k:=1 else k:=0; while n>0 dobegin n:=n div 10; k:=k+1; end; write (k); end.

Задача 2 на Python

n = str(abs(int(input())))

print(len(n))

29. Уровень палиндромности

Задано натуральное М. Если число не палиндром – записываем его в обратном порядка и слагаем с заданным. Действия повторяем до тех пор, пока не получим число-палиндром. Количество выполненных операций назовем уровнем палиндромности заданного числа.

Найти уровень палиндромности заданного числа М.

Код решения:

type mas=array[0..1000] of integer;

VAR i, mm, count, m, temp:longint;

s:string;

sm, old, new, mt:mas;

function check (st:mas):boolean;

var t, j:longint;

flag:boolean;

begin

t:=st[0];

flag:=true;

j:=1;

while flag and (j<=t div 2) do

begin

if st[j]<>st[t-j+1] then flag:=false;

inc(j);

end;

check:=flag;

end;

procedure perev(a:mas; var per:mas);

var t, tt:integer;

begin

for t:=1 to a[0] div 2 do

begin

tt:=a[t];

a[t]:=a[a[0]-t+1];

a[a[0]-t+1]:=tt;

end;

per:=a;

end;

procedure dig_to_str(h:longint; var st:mas);

var i:integer;

ch:char;

stemp:string;

begin

str(h, stemp);

for i:=1 to length (stemp) do

st[i]:=ord(stemp[length(stemp)-i+1])-48;

st[0]:=length(stemp);

end;

procedure sum_two_str(s1,s2:mas; var s3:mas);

var ln, i, per, dod1, dod2, sum:integer;

begin

per:=0;

ln:=s1[0];

for i:=1 to ln do

begin

s3[i]:=s1[i]+s2[i]+per;

per:=s3[i] div 10;

s3[i]:=s3[i] mod 10;

end;

if per=1 then begin s3[i+1]:=per; s3[0]:=s3[0]+1; end;

end;

BEGIN

readln (m);

fillchar(old, sizeof(old),0);

fillchar(mt, sizeof(mt),0);

fillchar(sm, sizeof(sm),0);

count:=0;

dig_to_str (m, sm);

old:=sm;

while not(check(sm)) do

begin

inc (count);

perev(old, mt);

sum_two_str(old, mt, sm);

new:=sm;

old:=new;

end;

writeln (count);

end.

9. N-значные числа

Найти количество N-значных чисел, у которых сумма цифр равна их произведению. Вывести наименьшее среди таких чисел для заданного N (N < 10).

Код решения:

*****

var

k,min:longint;

max,l,n:integer;

procedure recurs(i,a,d,s:longint);

var

j:integer;

begin

if i=0 then

begin

if d=s then

begin

k:=k+1;

if min=0 then min:=a;

end;

end

else

begin

if d<100 then

for j:=1 to 9 do

recurs(i-1,a*10+j,d*j,s+j);

end;

end;

begin

read(n);

for l:=1 to 9 do

recurs(n-1,l,l,l);

if n=1 then writeln(10,' ',0) else writeln(k,' ',min);

end.

На Python:

n, a, b = map(int,input().split()) if a==0 and b==0: s='0' elif a!=b and a!=0 and b!=0: s='2'for i in range(n-1): s=s+'0'else: s='1'for i in range(n-1): s=s+'0'print(s)

19. Степень симметрии

Степенью симметрии натурального числа назовём количество пар его десятичных цифр, в которых цифры совпадают и расположены симметрично относительно середины десятичной записи этого числа. Если некоторая цифра стоит посередине десятичной записи, её тоже нужно учитывать в паре с ней самой. Найти степень симметрии числа N.

Код решения:

var s:string;

n, k, i:integer;

c:char;

begin

s:='';

read (c);

while c in ['0'..'9'] do

begin

s:=s+c;

read(c);

end;

k:=0;

n:=length(s);

if n mod 2 = 1 then begin

for i:=1 to (n div 2)+1 do

if s[i]=s[n-i+1] then inc (k) end

else begin

for i:=1 to n div 2 do

if s[i]=s[n-i+1] then inc (k); end;

writeln (k);

end.

Задача 19 на питон

n=str(abs(int(input())))

if len(n)%2==0:

k=len(n)-1

s=0

for i in range(k):

if n[k-i]==n[i]:

s+=1

if i==len(n)/2-1:

break

print(s)

if len(n)%2>0:

k=len(n)-1

s=0

for i in range(k):

if n[k-i]==n[i]:

s+=1

if i==round(len(n)/2):

break

print(s)

Второй вариант задачи 19 с функцией

n=str(abs(int(input())))

def ff(n):

k=len(n)-1

s=0

for i in range(k):

if n[k-i]==n[i]:

s+=1

if len(n)%2==0 and i==len(n)/2-1:

break

if len(n)%2>0 and i==round(len(n)/2):

break

return s

print(ff(n))

22. "Зеркально простые" числа

Назовем число "зеркально простым", если само число является простым, и простым является число, записанное теми же цифрами в обратном порядке.

Для чисел от A до B найти количество "зеркально простых" чисел.

Код решения:

var t:string;

c:char;

code:word;

a, b, rez, i, mm, j, ti, temp:longint;

flag:boolean;

function proste(t:longint):boolean;

var s, i, k, j:longint;

begin

proste:=false;

if t=1 then proste:=false else

if t=2 then proste:=true

else begin

k:=0;

for i:=2 to trunc(sqrt(t)) do

if t mod i = 0 then k:=k+1;

if k=0 then proste:=true;

end;

end;

BEGIN

readln (a, b);

if a>b then begin i:=a; a:=b; b:=i; end;

rez:=0;

for i:=a to b do

begin

if proste(i) then

begin

t:=''; temp:=i;

while temp>0 do

begin

t:=t+chr((temp mod 10) +48);

temp:=temp div 10;

end;

val(t, ti, code);

if proste(ti) then inc (rez);

end;

end;

writeln (rez);

END.

6. Путёвки

Туристическая фирма не успела из-за больших морозов продать n (n < 15) путёвок на горнолыжные базы, срок действия которых уже наступил. С целью уменьшения убытков, было решено с 1 февраля все такие путёвки, которым осталось dk (dk30) дней, продавать по номинальной стоимости – по сk (сk100) грн за день только за те дни, что остались со дня продажи (k = 1..n).

На какую наибольшую сумму можно реализовать эти путёвки, если каждый день продавать по одной путёвке?

Код решения:

var

i,max,n:integer;

d,c:array[1..15] of integer;

procedure recurs(k,s:integer);

var

f,q,j:integer;

begin

f:=0;

for j:=1 to n do

if d[j]>=k then

begin

q:=(d[j]-k+1)*c[j];

f:=d[j];

d[j]:=0;

recurs(k+1,s+q);

d[j]:=f;

f:=1;

end;

if f=0 then

if max<s then max:=s;

end;

begin

read(n);

for i:=1 to n do

read(d[i],c[i]);

recurs(1,0);

writeln(max);

end.

Кульки

У продавця повітряних кульок є n кульок. Кожна з них має деякий колір. Але зовсім недавно Три Товстуни видали наказ, який дозволяє торгувати кульками тільки якогось одного кольору. Щоб не порушувати закон, але при цьому і не втратити прибуток, продавець вирішив перефарбувати деякі із своїх кульок.

Напишіть програму для визначення мінімальної кількості перефарбувань.

Вхідні дані

В першому рядку задано кількість кульок n (1n100000). Другий рядок містить n цілих чисел, в межах від 1 до 9, що визначає колір кульок (1 - синій, 2 - зелений, 3 - голубий, 4 - червоний, 5 - рожевий, 6 - жовтий, 7 - сірий, 8 - чорний, 9 - білий).

Вихідні дані

Виведіть мінімальну кількість кульок, які необхідно перефарбувати, щоб всі кульки були одного кольору.

Ліміт часу 1 секунда

Ліміт використання пам'яті 128 MiB

Вхідні дані #1

4 3 1 2 1

Вихідні дані #1

2

var kol:array[1..9] of longint; n,i,max:longint; a:byte; begin readln(n); for i:=1 to n dobegin read(a); kol[a]:=kol[a]+1; end; max:=kol[1]; for i:=2 to 9 doif max<kol[i] then max:=kol[i]; writeln(n-max); end.

pYTHON - 46%

n=int(input()) a = input().split()for i in range(len(a)): a[i] = int(a[i]) m=a[1] s=0 i=2 for i in range(n): if m==a[i]: s=s+1 else: a[i]==m print(n-s)

Целое число 8876

Задано действительное число n. Вывести Ok, если число n целое и No иначе.

Входные данные

Одно действительное число n.

Выходные данные

Вывести Ok, если число n целое и No иначе.

n=float(input())

if n.is_integer():

print('Ok')

else:

print('No')