с паскалем 9 класс Вводится четырёхзначное число. Определить количество различных чисел, которое можно составить из цифр данного числа (цифру нельзя дублировать, если в исходное число она входит 1 раз). Само число также учитывается при подсчёте.
Переведите числа в шестнадцатиричную, разбивая число справа налево по четыре бита (в шестнадцатиричной меньше вычислений для перевода в десятичную) 11 1100 0101 = 3С5(16) 11 0011 0101 = 335(16) 3С5(16) - 335(16) = 90(16) ( С=12, 12-3=9) 90(16) = 9*16+0 =144(10) Либо можете вычитать в двоичной системе Чтобы вычесть одно число из другого в двоичной системе вычитаемое записываете в обратном коде и добавляете к нему 1 - это дополнительный код затем складываете первое число со вторым, записанным в дополнительном коде 1111000101 - первое число 1100110101 - второе 0011001010 - второе в обратном коде 0011001011 - второе в дополнительном коде
1111000101 + 0011001011
0010010000 сложение бит производим по обычному правилу 1+1 - результат = 0 и перенос в следующий разряд 1+0 - результат 1 Полученное в результате сложения число 0010010000(2) разобьем на группы по 4 бита справа налево, получим шестнадцатиричное представление 90(16)=9*16+0=144(10)
Делите последовательно на 2 и остаток от деления записываете справа налево - получаете двоичное представление числа 40(10) 40/2=20 - остаток = 0 20/2=10 - остаток = 0 10/2=5 - остаток =0 5/2 =2 , остаток = 1 2/2=1 остаток =0 1 если после последнего деления результат меньше 2 то частное записываем в представление получили биты: 101000 - это и есть двоичное представление числа 40(10) для числа 8 8/2=4 - остаток 0 4/2 =2 - остаток 0 2/2=1 двоичное представление числа 8(10) 100(2) так же вычисляете для 54(10) и 9(10) 9(10) = 8(10) + 1 = 100(2) + 1 = 101(2) 54/2=27 ->0 27/2=13 ->1 13/2=6 ->1 6/2=3 -> 0 3/2=1 -> 1 -> 1 двоичное представление числа 54(10) 110110(2) = 54(10) 110110 = 2(в пятой)+2(в четвертой) +2(во второй)+ 2(в первой) степенях =32+16+4+2=48+6=54
например число 123 - 6 комбинаций, 120 - 4 комбинации.
также работает с 4значными
Объяснение:
program prog;
var num,i,j,tmp:integer;
arr:array [1..4] of integer=(-1,-1,-1,-1);
zero: boolean;
begin
writeln('Input number:');
readln(num);
i:=1;j:=1;zero:=false;
while num<>0 do begin
tmp:=num mod 10;
if (tmp<>arr[1]) and (tmp<>arr[2]) and (tmp<>arr[3]) and (tmp<>arr[4]) then begin
arr[i]:=tmp;
if (zero=false) and (tmp=0) then zero:=true;
write(i,':');
writeln('arr[i]=',arr[i]);
writeln('num=',num);
i:=i+1
end;
num:=num div 10;
end;
num:=1;tmp:=1;
i:=i-1;
for j:=1 to i do num:=num*j;
if zero=true then begin
for j:=1 to i-1 do tmp:=tmp*j;
num:=num-tmp;
end;
writeln('vsego chisel =',num);
end.