Условие задач | Решение задач |
Дано натуральное число 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 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. |