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 (0 ≤ n ≤ 2 ∙109).
Выходные данные
Количество цифр в числе 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 (dk ≤ 30) дней, продавать по номинальной стоимости – по сk (сk ≤ 100) грн за день только за те дни, что остались со дня продажи (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 (1 ≤ n ≤ 100000). Другий рядок містить 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')