0661246726
17.02.2021 14:55

E4. Разбиение на неубывающие слагаемые, обратный порядок Ограничение времени 1 секунда
Ограничение памяти 64Mb
Ввод стандартный ввод или input.txt
Вывод стандартный вывод или output.txt
Дано натуральное число N. Рассмотрим его разбиение на различные натуральные слагаемые. Два разбиения, отличающихся только порядком слагаемых, будем считать за одно, поэтому можно считать, что слагаемые в разбиении упорядочены по неубыванию.

Формат ввода
Задано единственное число N. (N ≤ 40)

Формат вывода
Необходимо вывести все разбиения числа N на различные натуральные слагаемые. Слагаемые выводите по неубыванию.


E4. Разбиение на неубывающие слагаемые, обратный порядок Ограничение времени 1 секунда Ограничение п
E4. Разбиение на неубывающие слагаемые, обратный порядок Ограничение времени 1 секунда Ограничение п

Нажмите на рекламу ниже и сразу увидите ответ
Популярные вопросы:
Ответ:
23redalice11
03.02.2020 10:21
Ну, в общем, лови решение.

{ FreePascal 2.6.4}
program test;
uses
    crt;
var
    a, b, c, d  : integer;
    f : longint;

procedure swap (var x : integer; var y : integer);
var z : integer;
begin
    z := x;
    x := y;
    y := z;
end;

function nod (m, n : integer) : integer;
begin
    while m<>n do begin
        if m>n
        then
            m:=m-n
        else
            n:=n-m;
    end;
    nod := m;
end;

function max (a,b : integer) : integer;
begin
    if a>b
    then max := a
    else max := b;
end;

function min (x, y, z : integer) : integer;
var m : integer;
begin
    m := x;
    if y<m then m := y;
    if z<m then m := z;
    min := m;
end;

function mypow (a, b : integer) : integer;
var e, f : integer;
begin
    f := 1;
    for e:=1 to b do f := f*a;
    mypow := f;
end;

function fact(a : integer) : longint;
var
    i : integer;
    res : longint;
begin
    res := 1;
    for i := 1 to a do res := res*i;
    fact := res;
end;

begin
    clrscr;
    writeln('Test of function SWAP');
    write('Input A: ');
    readln(a);
    write('Input B: ');
    readln(b);
    swap(a, b);
    writeln('A=', a, ', B=', b);
    writeln;

    writeln('Test of function NOD');
    write('Input A: ');
    readln(a);
    write('Input B: ');
    readln(b);
    c := nod(a, b);
    writeln('NOD(', a, ',', b, ')=', c);
    writeln;

    writeln('Test of function MAX');
    write('Input A: ');
    readln(a);
    write('Input B: ');
    readln(b);
    c := max(a, b);
    writeln('MAX(', a, ',', b, ')=', c);
    writeln;

    writeln('Test of function MIN');
    write('Input A: ');
    readln(a);
    write('Input B: ');
    readln(b);
    write('Input C: ');
    readln(c);
    d := min(a, b, c);
    writeln('MIN(', a, ',', b, ',', c, ')=', d);
    writeln;

    writeln('Test of function POW');
    write('Input A: ');
    readln(a);
    write('Input B: ');
    readln(b);
    c := mypow(a, b);
    writeln('POW(', a, ',', b, ')=', c);
    writeln;

    writeln ('Test of function FACT (not large than 12!)');
    write('Input A: ');
    readln(a);
    f := fact(a);
    writeln(a, '!=', f);
    writeln;
    readkey;

end.
0,0(0 оценок)
Ответ:
azharabikenova
22.01.2020 07:44

Объяснение:

1) Расписываем так же, как и для десятичной системы, только используя степени 2, а не 10:

10010110_2=1\cdot2^7+0\cdot2^6+0\cdot2^5+1\cdot2^4+0\cdot2^3+1\cdot2^2+1\cdot2^1+0\cdot2^0=\\=128+0+0+16+0+4+2+0=150

1110011100_2=1\cdot2^9+1\cdot2^8+1\cdot2^7+0\cdot2^6+0\cdot2^5+1\cdot2^4+1\cdot2^3+\\+1\cdot2^2+0\cdot2^1+0\cdot2^0=512+256+128+0+0+16+8+4+0+0=\\=924

10011010_2=1\cdot2^7+0\cdot2^6+0\cdot2^5+1\cdot2^4+1\cdot2^3+0\cdot2^2+1\cdot2^1+0\cdot2^0=\\=128+0+0+16+8+0+2+0=154

2) Тут можно делить на 2, выписывая остатки, и после этого написать остатки в обратном порядке, или представить исходное число в виде суммы степеней двойки, или воспользоваться результатами предыдущего задания.

a. Последовательно делим на 2:

159 : 2 = 79 (ост. 1)

79 : 2 = 39 (ост. 1)

39 : 2 = 19 (ост. 1)

19 : 2 = 9 (ост. 1)

9 : 2 = 4 (ост. 1)

4 : 2 = 2 (ост. 0)

2 : 2 = 1 (ост. 0)

1 : 2 = 0 (ост. 1)

Выписываем остатки в обратном порядке и получаем:

159=10011111_2

Можно было также заметить, что 159 = 154 + 5 = 154 + 4 + 1, тогда (пользуемся предыдущим пунктом)

159=(128+0+0+16+8+0+2+0) + (4+1)=\\=2^7+0+0+2^4+2^3+2^2+2^1+2^0=10011111_2

b. 342 = 256 + 86 = 256 + 64 + 22 = 256 + 64 + 16 + 6 = 256 + 64 + 16 + 4 + 2, значит,

342=101010110_2

c. Тут сразу можно заметить, что 512=2^9, тогда двоичное представление - 1 и 9 нулей

512=1000000000_2

0,0(0 оценок)
Полный доступ
Позволит учиться лучше и быстрее. Неограниченный доступ к базе и ответам от экспертов и ai-bota Оформи подписку
logo
Начни делиться знаниями
Вход Регистрация
Что ты хочешь узнать?
Спроси ai-бота