это называется в русском языку тога
В каждом дереве 2^n узлов. Поскольку надо найти наименьшее количество деревьев, надо разбить число 2947 на слагаемые, которые представляют собой степени двойки, причем каждое новое отделяемое слагаемое должно быть максимальной степенью двойки, "влезающей" в остаток. Количество слагаемых будет являться ответом.
2947 = 2048 + 899 = 2048 + 512 + 387 = 2048 + 512 + 256 + 131 = 2048 + 512 + 256 + 128 + 3 = 2048 + 512 + 256 + 128 + 2 + 1
Ответ: 6.
Иными словами, переводим число 2947 в двоичную систему и считаем количество единиц в записи числа.
В программе предполагается, что слова отделяются друг от друга одним пробелом, знаков препинания нет.
const m=3;
var s:string;
sl:array[1..m] of string=('ЗНАЧИТ', 'ВОТ', 'АВТОМОБИЛЬ');
n:array[1..m] of integer;
i:integer;
procedure pr(s1,s2:string; var k:integer);
var l,p:integer;
begin
s1:=' '+s1+' ';
l:=length(s2);
k:=0;
p:=pos(s2,s1);
while p>0 do
begin
if (s1[p-1]=' ')and(s1[p+l]=' ') then k:=k+1;
delete(s1,1,p+l);
p:=pos(s2,s1);
end;
end;
begin
writeln('Введите текст:');
readln(s);
for i:=1 to m do
begin
pr(s,sl[i],n[i]);
writeln(sl[i],' - ',n[i]);
end;
end.
Пример (слов меньше 40):
Введите текст:
ЗНАЧИТ ТАК ВОТ АВТОМОБИЛЬ РАЗ ВОТ АВТОМОБИЛЬ ДВА ВОТ АВТОМОБИЛЬ ТРИ
ЗНАЧИТ - 1
ВОТ - 3
АВТОМОБИЛЬ - 3
#include <iostream>
using namespace std;
int main()
{
int A,B,C;
cin >> A >> B >> C;
for(int i = A; i <= B; i++)
{if(i % C == 0) cout << i << " ";}
return 0;
}
Var
n,i,s:integer;
begin
Write('n='); Read(n);
i:=7; s:=0;
while i<=n do begin
s:=s+i;
i:=i+5
end;
Writeln('S=',s)
end.