Найдите минимальное положительное xx такое, что если результат вычисления выражения 7417(8) + x(10) перевести в двоичную систему счисления, то запись будет содержать только цифры «1». в ответе укажите целое число в десятичной системе счисления
Запишем число 7417₈ в двоичной системе, заменяя каждую его цифру тремя двоичными и получим 111 100 001 111₂ Осталось дописать единицы в тех разрядах, где нули: 111 100 001 111 000 011 110 000 - это и есть искомое число. Переведем его в восьмеричную систему, заменяя каждые три двоичные цифры на одну восьмеричную (так будет быстрее считать): 360₈ А теперь найдем десятичный эквивалент: 360₈ = 3×8² + 6×8 = 3×64 + 48 = 240₁₀
type maze = array [1..k, 1..k] of integer; var l : maze; n, m: integer; i, j: integer; c: char; t: text; w: integer; x0, y0: integer; x1, y1: integer;
procedure ways(a,b,r:integer); begin if (w = 0) or (r < w) then {нет смысла идти дальше, если текущий путь уже превосходит найденный} if (l[a,b] <> -2) then if (r < l[a,b]) or (l[a,b] = -1) then {нет смысла идти, если текущая клетка уже была достигнута за меньшее число шагов} begin l[a,b] := r; if (a = x1) and (b = y1) then w := r else begin if a <> 1 then ways(a - 1, b, r + 1); if b <> 1 then ways(a, b - 1, r + 1); if a <> n then ways(a + 1, b, r + 1); if b <> m then ways(a, b + 1, r + 1); end end; end; begin assign(t, 'input.txt'); reset(t); w := 0; readln(t, n, m); readln(t, x0, y0); readln(t, x1, y1); for i := 1 to n do begin for j := 1 to m do begin read(t, c); case c of '.' : l[i,j] := -1; {будем считать, что если клетка отмечена как -1, то путь к ней еще не найден} 'X' : l[i,j] := -2; {-2, если клетка непроходима} end; end; readln(t) end; close(t); if (l[x0,y0] <> -2) and (l[x1,y1] <> -2) then begin l[x0,y0] := 1; {просто трюк, чтобы пройти проверку на (r < l[x0,y0])} ways(x0, y0, 0); end else l[x1,y1] := -1; writeln(l[x1,y1]) end.
begin var (cost, t, k) := (Arr(15, 70, 125, 230, 440), Arr(1, 5, 10, 20, 60), new integer[5]); var n := ReadInteger('n->'); for var i := 4 downto 0 do begin k[i] := n div t[i];n := n mod t[i]; end; if k[0] * cost[0] >= cost[1] then begin k[0] := 0;inc(k[1]); end; if k[0] * cost[0] + k[1] * cost[1] >= cost[2] then begin k[0] := 0;k[1] := 0;inc(k[2]); end; if k[0] * cost[0] + k[1] * cost[1] + k[2] * cost[2] >= cost[3] then begin k[0] := 0;k[1] := 0;k[2] := 0;inc(k[3]); end; if k[0] * cost[0] + k[1] * cost[1] + k[2] * cost[2] + k[3] * cost[3] >= cost[4] then begin k[0] := 0;k[1] := 0;k[2] := 0;k[3] := 0;inc(k[4]); end;
for var i := 0 to 4 do WritelnFormat('{0} билет(ов)- {1} штук(а)', t[i], k[i]); end.
Осталось дописать единицы в тех разрядах, где нули:
111 100 001 111
000 011 110 000 - это и есть искомое число.
Переведем его в восьмеричную систему, заменяя каждые три двоичные цифры на одну восьмеричную (так будет быстрее считать): 360₈
А теперь найдем десятичный эквивалент:
360₈ = 3×8² + 6×8 = 3×64 + 48 = 240₁₀