PascalABC.NET 3.3.5, сборка 1640 от 17.03.2018
Внимание! Если программа не работает, обновите версию!
procedure Foo;
begin
var k:integer;
Read(k);
if k<>0 then begin Foo; Print(k) end
end;
begin
Foo;
end.
1 символ=1байт
считаем, сколько весит 1 книга:
40*50*200=400000байт
Находим кол-во книг
80000000000/400000=200.000 книг
(вроде так)
1. Строим математическую модель
1+2+3+... - это арифметическая прогрессия с разностью d, равной единице и первым членом a₁=1.
Сумма n первых членов арифметической прогрессии может быть найдена по формуле S=(2a₁+d(n-1))*n/2.
В нашем случае формула упрощается: S = (2+1(n-1))n/2 = n(n+1)/2
По условию члены прогрессии суммируются, пока сумма не превысит 1000.
Тогда 0.5n(n+1)>1000
n(n+1)>2000; n²+n-2000>0
Найдем минимальное n, удовлетворяющее этому условию.
n²+n+2000=0; D=1+8000=8001; √D ≈ 89.4
n₁=0.5(-1-89.4) < 0 - не устраивает, поскольку n>1
n₂=0.5(-1+89.4) =44.2
Принимаем n=45.
Сумма составит 45(45+1)/2=1035, а последний член равен n, т.е .45
Непонятно, зачем нам составлять программу. Пусть для того, чтобы проверить наше решение, поэтому выберем другой алгоритм.
Будем последовательно наращивать сумму 1+2+3+4 до превышения ей значения 1000. Решение, что называется, "в лоб".
2. Блок-схема приведена во вложении.
3. Программа
<em>// PascalABC.NET 3.3, сборка 1625 от 17.01.2018</em>
<em>// Внимание! Если программа не работает, обновите версию!</em>
begin
var (s,i):=(0,1);
while true do begin
s+=i;
if s>1000 then begin
Writeln('S=',s,', последний член ',i);
exit
end;
i+=1
end
end.
<u>Результат</u>
S=1035, последний член 45
А1 - 3 (=)
А2 - 2 (=А1/В1)
А3 - 2 (срзнач(А1:В3)
А4 - 3
В1 - 285, 270, 2
В2 - (3*(степень (С2;А1))/4*В1*А1)+32*С2*(степень (В1;4))
в последнем, правда, может быть и не совсем верно, нет Экселе под рукой.
Массив- это "шкаф" в который надо что-то положить, но у этого "шкафа" не бесконечные "полки", поэтому нам будет проще в начале программы обозначить массив например в 10 "полок" и уже их все заполнять.
Разберем вариант до нуля. Его ведь может и не быть? А массив, как я говорил не вечный и имеет ограниченное количество "полок". Поэтому если в программе не будет введен ноль, то массив будет перезаполнен значениями, что приведен к ошибке программы.