Вы писали, что программа должна переводить введённое число в "прямой код", хотя, в тоже время писали, что "она не должна быть кратна" 8 (или 4). Вот "простая" программа для перевода в двоичную систему счисления натуральных чисел. На этой основе можете потом её "усложнять" (например, ввод целых, или перевод в двоичный прямой код).
PascalABC.NET:
## var (x, s) := (ReadInteger, ''); while x>0 do (s, x) := (x mod 2 + s, x div 2); Write(s)Pascal:
var x: integer; s: string; begin Read(x); while x>0 do begin s := x mod 2 + s; x := x div 2; end; Write(s);end.Задание 2:PascalABC.NET:
## var (s, x) := (ReadString, 0); var al := '0123456789ABCDEF'; var i := 1; foreach var c in s.Reverse do (x, i) := (x + i*(Pos(c, al)-1), i*16); Write(x)Pascal:
var s, al: string; x, i, n: int64; begin Read(s); al := '0123456789ABCDEF'; n := 1; for i := Length(s) downto 1 do begin x := x + n*(Pos(s[i], al)-1); n := n * 16; end; Write(x) end.Алгоритм: положим в ячейку, где стоит шашка, значение 1. В некоторую ячейку с горизонталью i и вертикалью j можно добраться из клеток (i-1, j-1) и (i-1, j+1), если эти клетки существуют. Тогда для двумерного массива A, выступающего в роли доски, будет справедливо следующее утверждение: A[i+1][j] = A[i][j-1] + A[i][j+1]. Существовать ячейки не будут, если находятся в крайних столбцах: A[i+1][0] = A[i][1] и A[i+1][7] = A[i][6].
Программа:
y, x = map(int, input().split())
x, y = x - 1, y - 1
board = [[0]*8 for i in range(8)]
board[x][y] = 1
for i in range(x, 7):
board[i+1][0] += board[i][1]
for j in range(1, 7):
board[i+1][j] += board[i][j-1] + board[i][j+1]
board[i+1][7] += board[i][6]
print(sum(board[7]))
На передний план