Любое трехзначное число вида "abc" можно представить как выражение 100a+10b+c Тогда: 100a+10b+c - 100c+10b+a
99(a-c) Значение, равное 99(a-c), равно трехзначному числу, составленному из тех же самых цифр a, b, c. Три цифры можно расставить шестью но два из них мы уже использовали, поэтому остается проверить четыре остальные расстановки, что и делает приведенная программа. qBASIC CLS FOR a = 1 TO 9 FOR b = 0 TO 9 FOR c = a - 1 TO 1 STEP -1 k = 99 * (a - c) k2 = 100 * a + 10 * c + b k3 = 100 * c + 10 * a + b k4 = 100 * b + 10 * a + c k5 = 100 * b + 10 * c + a IF k = k2 OR k = k3 OR k = k4 OR k = k5 THEN PRINT a; b; c; " - "; c; b; a; " = "; k END IF NEXT c NEXT b NEXT a Результат выполнения программы: 9 5 4 - 4 5 9 = 495
Задача, аналогичная той, которую публиковали вчера. Только цикл repeat заменяем на while.
Сначала немного математики.
О модуле тут смысла нет говорить, поскольку все an - суть положительные величины на интервале (0;1).
uses Crt;
function ai(n:integer):real; var i:integer; p:real; begin p:=1; for i:=n+1 to 2*n do p:=p*i; ai:=1/p end;
var i:integer; eps,s,an:real; begin ClrScr; Write('eps='); Read(eps); s:=0; i:=1; an:=eps+1; while an>=eps do begin an:=ai(i); if an>=eps then begin s:=s+an; Inc(i) end end; Writeln('s=',s); ReadKey end.
Тестовые решения: eps=0.07 s= 5.8333333333E-01
eps=0.000001 s= 5.9229647667E-01
eps=1e-8 s= 5.9229653448E-01
Для контроля результата можно отметить, что сумма первых 1000 членов ряда равна приблизительно 5.922965365Е-01
Если раздражает наличие функции, можно и без нее: uses Crt;
var i,j:integer; eps,s,an,p:real; begin ClrScr; Write('eps='); Read(eps); s:=0; i:=1; an:=eps+1; while an>=eps do begin p:=1; for j:=i+1 to 2*i do p:=p*j; an:=1/p; if an>=eps then begin s:=s+an; Inc(i) end end; Writeln('s=',s); ReadKey end.
100a+10b+c
Тогда:
100a+10b+c
-
100c+10b+a
99(a-c)
Значение, равное 99(a-c), равно трехзначному числу, составленному из тех же самых цифр a, b, c. Три цифры можно расставить шестью но два из них мы уже использовали, поэтому остается проверить четыре остальные расстановки, что и делает приведенная программа.
qBASIC
CLS
FOR a = 1 TO 9
FOR b = 0 TO 9
FOR c = a - 1 TO 1 STEP -1
k = 99 * (a - c)
k2 = 100 * a + 10 * c + b
k3 = 100 * c + 10 * a + b
k4 = 100 * b + 10 * a + c
k5 = 100 * b + 10 * c + a
IF k = k2 OR k = k3 OR k = k4 OR k = k5 THEN
PRINT a; b; c; " - "; c; b; a; " = "; k
END IF
NEXT c
NEXT b
NEXT a
Результат выполнения программы:
9 5 4 - 4 5 9 = 495
Сначала немного математики.
О модуле тут смысла нет говорить, поскольку все an - суть положительные величины на интервале (0;1).
uses Crt;
function ai(n:integer):real;
var
i:integer;
p:real;
begin
p:=1;
for i:=n+1 to 2*n do p:=p*i;
ai:=1/p
end;
var
i:integer;
eps,s,an:real;
begin
ClrScr;
Write('eps='); Read(eps);
s:=0; i:=1; an:=eps+1;
while an>=eps do begin
an:=ai(i);
if an>=eps then begin s:=s+an; Inc(i) end
end;
Writeln('s=',s);
ReadKey
end.
Тестовые решения:
eps=0.07
s= 5.8333333333E-01
eps=0.000001
s= 5.9229647667E-01
eps=1e-8
s= 5.9229653448E-01
Для контроля результата можно отметить, что сумма первых 1000 членов ряда равна приблизительно 5.922965365Е-01
Если раздражает наличие функции, можно и без нее:
uses Crt;
var
i,j:integer;
eps,s,an,p:real;
begin
ClrScr;
Write('eps='); Read(eps);
s:=0; i:=1; an:=eps+1;
while an>=eps do begin
p:=1;
for j:=i+1 to 2*i do p:=p*j;
an:=1/p;
if an>=eps then begin s:=s+an; Inc(i) end
end;
Writeln('s=',s);
ReadKey
end.