Интересные задачи
Условие задач Решение задач
Дано натуральное число N. Заменим это число суммой квадратов его цифр, и последовательно выполним К таких замен. Какое число получится в результате этих операций? program zadacha;
var a,k,n,s: integer;
begin
writeln('vvedite chislo');
readln(a);
writeln('vvedite chislo povtorenii');
readln(k);
for var i:=1 to k do begin
s:=0;
while a<>0 do begin
s:=s+(a mod 10)*(a mod 10);
a:=a div 10;
end;
a:=s;
end;
writeln('otvet=',a);
end.
Дана не пустая строка S и два целых числа Aи B (1 ≤ A ≤ B, В не превосходит длинны строки). Требуется «перевернуть» часть строки, поменяв местами символы с номерами A и B, A-1 и B-1,…, A-nи B-n до тех пор, пока A-n < B-n. program zadacha;
Var s:string;
j,i:integer;
k:char;
Begin
writeln('vvedi stroky');
read(s);
writeln('vvedi chisla');
read(i,j);
while i k:=s[i];
s[i]:=s[j];
s[j]:=k;
i:=i+1;
j:=j-1;
end;
writeln('s=',s);
End.
Даны два целых положительных числа А и В (А ≤ В). Определите для скольких целых чисел из интервала [А, В] их двоичное представление содержит нечётное количество единиц. program zadacha;
constn=80;
var p,i,k,k1:byte;
m,z,a,b,ss,d:integer;
c:array[1..n] of byte;
begin
writeln('vvedite A, B ');
readln(a,b);
p:=2;
ss:=0;
for z:=a to b do
begin
m:=z;
i:=0;
d:=0;
while m<>0 do
begin
i:=i+1; c[i]:=m mod p; m:=m div p
end;
k:=i;
for k1:=1 to k do
if c[k1]=1 then d:=d+1;
if d mod 2<>0 then ss:=ss+1;
end;
writeln('otvet= ',ss);
end.
Даны две матрицы А и В, состоящие из М строк и Nстолбцов каждая. Матрица А заполняется числами от 1 до M×N сначала по строкам, а затем по столбцам, а матрица В вначале – по столбцам, а потом по строкам. Найдите количество одинаковых пар (i, j), 1 ≤ i ≤ M, 1 ≤ j ≤ N таких, что Ai,j=Bi,j. program zadacha;
const m=3; n=5;
var a,b:array[1..m,1..n] of integer;
i,j:byte;
k,z:integer;
begin
k:=1;
for i:=1 to m do
for j:=1 to n do
begin
a[i,j]:=k;
k:=k+1;
end;
k:=1;
for j:=1 to n do
for i:=1 to m do
begin
b[i,j]:=k;
k:=k+1;
end;
for i:=1 to m do
begin
for j:=1 to n do write(a[i,j]:5,' ');
writeln
end;
writeln; writeln;
for i:=1 to m do
begin
for j:=1 to n do write(b[i,j]:5,' ');
writeln
end;
z:=2;
for i:=2 to m-1 do
for j:=2 to n-1 do
if a[i,j]=b[i,j] then z:=z+1;
writeln('otvet=',z);
end.
Олимпиада по информатике и веб-программированию для школьников. Белорусский государственный университет, г. Минск Еще пифагорейцы, жившие две с половиной тысячи лет тому назад, обнаружили, что числа 220 и 284 обладают одним замечательным свойством. Сумма собственных делителей (т. е. делителей, отличных от самого числа) у 220 равняется 1+2+4+5+10+11+20+22+44+55+110=284. В свою очередь для числа 284 соответствующая сумма равна 1+2+4+71+142=220. Эта связь между числами скорее всего не очень удивила древних математиков, которые объявили данную пару чисел символом дружбы. С тех пор два числа, такие, что каждое из них равно сумме собственных делителей другого, называются дружественными. Напишите программу, позволяющую найти все пары дружественных чисел, принадлежащих интервалу от A до B. Укажите полученные значения для A=1000, B=2013. program zadacha;
const n=1000; k=2013;
{for [10..1000]: (220,284)}
{for [1000..10000]: (1184,1210),(2620,2924),(5020,5564),(6232,6368)}var n1,n2,st,nn:integer;
function summna(a:integer):integer;
var at,sa:integer;
begin
sa:=1; at:=a div 2;
while (at>1) do
begin
if (a mod at=0) then sa:=sa+at; at:=at-1
end;
summna:=sa
end;{summna}
function prostoe(a:integer):boolean;
var it,lim:integer;
begin
prostoe:=true;
if (a>3) then
begin
lim:=a div 2; it:=2;
while (it<=lim) do
if (a mod it=0) then
begin
prostoe:=false; exit
end
else
if it=2 then it:=it+1 else it:=it+2
end end;{prostoe}
begin
nn:=1;
for n1:=n to k-1 do
if not prostoe (n1) then
begin
st:=summna(n1);
for n2:=n1+1 to k do
if not prostoe(n2) then
if (st=n2) and (n1=summna(n2)) then begin
writeln('yes ','(',n1,',',n2,')');
nn:=0; end;
end;
if nn=1 then writeln('no');
end.
Дана строка цифр, найти максимальную цифру из числа повторяющих минимальное количество раз. Например для строки 6466422 такая цифра будет 4. program ypr;
var s,s1:string; n,i,k,m,z,j,cod:integer; b:char;
d,g,a:array[1..100] of integer;
begin
writeln('vvedi chislo ');
readln(s1);
n:=length(s1); s:=s1; j:=1;
while n<>0 do begin
b:=s[1];
val(b,g[j],cod);
k:=0; i:=1;
m:=n;
while i<=n do begin
z:=pos(b,s);
Delete(s,z,1);
n:=n-1;
i:=i+1;
end;
n:=length(s);
k:=m-n;
m:=n;
d[j]:= k;
if b=s[n] then begin d[j]:= k+1; n:=0 end;
writeln('d=', d[j],' g=',g[j]);
j:=j+1
end;
k:= d[1];
for i:=2 to j-1 do begin a[i]:=0;
if d[i]<=k then begin k:=d[i]; a[i]:=g[i];
end;
end;
k:= a[1];
for i:=2 to j-1 do
if a[i]>=k then begin k:=a[i];
end;
writeln(' k=',k );
end.
Удалить из чисел на интервале (к,n) нечётные цифры. program ypr;
var a,f,x,b,c,i,n,m,k:integer;
begin
writeln('Введите интервал чисел');
readln(n,m);
for k:=n to m do begin
f:=1;
c:=0;
i:=k;
while i<>0 do begin
a:=i mod 10;
i:=i div 10;
if a mod 2=0 then begin b:=b+a;
b:=b*10;
c:=c+1;
end;
end;
b:=b div 10;
for i:=1 to c-1 do
f:=f*10;
x:=0;
for i:=1 to c do begin
a:=b mod 10;
x:=x+a*f;
b:=b div 10;
f:=f div 10;
end;
writeln('x= ',x,' ',k);
end;
end.
Задано натуральное число N (N ≤ 2 000 000 000). Сколько различных цифр в его десятичной записи? var n, a,s,k1,k2,k3,k4,k5,k6,k7,k8,k9,k10 : longint ;
begin
write('введите n ') ;
read(n);
k1:=0; k2:=0; k3:=0; k4:=0; k5:=0; k6:=0;
k7:=0; k8:=0; k9:=0; k10:=0;
while n>0 do begin
a:= n mod 10;
n:= n div 10; write(' n=',n:4 );
if a=0 then k1:=1;
if a=1 then k2:=1;
if a=2 then k3:=1;
if a=3 then k4:=1;
if a=4 then k5:=1;
if a=5 then k6:=1;
if a=6 then k7:=1;
if a=7 then k8:=1;
if a=8 then k9:=1;
if a=9 then k10:=1; end;
s:=k1+k2+k3+k4+k5+k6+k7+k8+k9+k10;
write(s:4 );
end.
Задано предложение, слова которого разделены одним пробелом, в конце предложения - точка. Других знаков препинания в предложении нет. Определить количество слов, количество символов в которых - число простое. (Простое число – это число, которое делится только на 1 и само на себя. Число 1 - не является простым.) program tas;
var s1:string; b:array [0..100] of integer;
it, k, s, m, lim,i:integer; f:Boolean;
begin
writeln('vvedi predlogenie');
readln(s1);
i:=length(s1); k:=0; s:=0;
for m:=1 to i do
if (s1[m]=' ') or (s1[m]='.') then begin k:=k+1; s:=0; end
else begin s:=s+1; b[k]:=s;
end ;
for m:=0 to k-1 do begin
f:=true;
if (b[m]>2) then
begin
lim:=b[m] div 2; it:=2;
while (it<=lim) do begin
if (b[m] mod it=0) then f:=false;
it:=it+1
end ; writeln(' f=',f:2);
if f=true then s:=s+1;
end; end;
writeln(' slov prostie=',s:2);
end.
Задан целочисленный одномерный массив, состоящий из N элементов. Все элементы повторяются в массиве четное количество раз и только один элемент – нечетное. Необходимо определить этот элемент. ( N ≤ 1 000, 0 ≤ a[i] ≤ 65 000) program Primer5_4;
var A: array[1..15] of integer;
n, i,s,b,j,k : integer ;
begin
write('введите n ') ;
read(n);
for i := 1 to n do read(a[i]);
for i :=1 to n-1 do begin
s:=0; b:=a[i]; j:=1;
while (j<=n) do begin
if A[j]=b then s:=s+1;
j:=j+1;
end;
if s mod 2=1 then k:= a[i] end;
writeln(' element=',k);
end.
Отражение и преломления луча на границе двух сред. program test;
uses graphABC,crt;
Var m, p, y: integer; y3, t, a, b, e, v, k, n, z:real;
begin
SetWindowSize(500,300);
SetBrushColor(cllightgray);
Rectangle(20,150,480,280);
Write('введите угол в радианах:');
Line(20,150,480,150);
Setpencolor(clGreen);
Line(250,280,250,20);
Read(a);
t:=sin(a);
b:=t*260;
y3:=150-b;
y:=Trunc(y3);
Setpencolor(clRed);
Line(20,y,250,150);
Line(480,y,250,150);
Write('введите коэффициент преломления:');
Read(n);
e:=90-a;
v:=sin(e);
k:=v/n;
z:=k*130;
p:=Trunc(z);
m:=p+250;
SetPenColor(clYellow);
Line(250,150,m,280);
end.


На главную