5. Исполнитель Калькулятор имеет команды
1. прибавь 1
2. раздели на 2
Нужно составить самую короткую программ
самую короткую программу для калькулятора е которой из числа а можно получить число b. Как лучше
перебирать варианты программ, от начального числа к конечному
или наоборот? Почему?
i,k,N : Integer;
Begin
For i:=0 to 6 do m[i]:=0;
Readln(N);
k:=6;
While N>0 do
Begin
If N>=Power(2,k) then
Begin
N:=N-Trunc(Power(2,k));
Inc(m[k]);
end else Dec(k);
end;
For i:=0 to 6 do Writeln(Power(2,i),' ',m[i],' шт.');
end.
Еще вариант:
Const
NN = 7;
money : array[1..7] of Integer = (1,2,4,8,16,32,64);
Var m : array[1..NN] of Integer;
i,k,N : Integer;
Begin
For i:=1 to NN do m[i]:=0;
Readln(N);
k:=NN;
While N>0 do
Begin
If N>=money[k] then
Begin
N:=N-money[k];
Inc(m[k]);
end else Dec(k);
end;
For i:=1 to NN do Writeln(money[i],' ',m[i],' шт.');
end.
ВСЕ ЗАДАЧИ В ОДНОЙ
var enter,numberDgigits,i,j,cod,k:integer;
number:string;
ch:char;
begin
writeln('введите целое число');
readln(number);
for i:=1 to length(number)-1 do
if number[i]=number[i+1] then
k:=k+1;
if k<>0 then begin
writeln('в записи числа есть две одинаковые цифры стоящие рядом');
end
else
writeln('в записи числа нету двух одинаковых цифр стоящих рядом');
k:=0;
for i:=1 to length(number)-1 do begin
ch:=number[i];
for j:=1+i to length(number) do
if ch=number[j] then
k:=k+1;
end;
if k<>0 then begin
writeln('в записи числа есть одинаковые цифры');
end
else
writeln('в записи числа нету одинаковых цифр');
val(number,enter,cod);
if (enter>99) and (enter<1000) then begin
writeln('число трехзначное')
end
else
writeln('число не трехзначное');
numberDgigits := 0;
while enter > 0 do begin
numberDgigits := numberDgigits + enter mod 10;
enter := enter div 10;
end;
writeln('сумма цифр = ',numberDgigits);
readln;
end.