Шахматный номер (3 уровень) |
Условие :Телефонный номер называется “шахматным”, если его цифры набираются на телефонном кнопочном номеронабирателе ходом шахматного коня. Написать программу, подсчитывающую, сколько можно набрать различных семизначных “шахматных” номеров, начинающихся с заданной цифры. 1 2 3 4 5 6 7 8 9
0
Технические требования: Входной файл INPUT.TXT содержит число N [0..9]. Выходной файл OUTPUT.TXT должен содержать единственное число - решение задачи. Пример файлов входных и выходных данных: Input.txt Output.txt 1 136 4 168 5 0 8 104
Решение: Вначале для каждой цифры нужно задать все возможные пути перемещения (конём). Затем, используя рекурсивную процедуру, выполняем поиск всех семизначных номеров, удовлетворяющих условию... const mas:array[0..9,1..3] of integer = ((4,6,-1), (6,8,-1), (7,9,-1), (4,8,-1), (3,9,0), (-1,-1,-1), (1,7,0), (2,6,-1), (1,3,-1), (2,4,-1)); input = 'input.txt'; output = 'output.txt'; var N:integer; Tel:integer; f1,f2:text; procedure Find(digit:integer; count: integer); var i:integer; begin if digit=-1 then exit; if count =7 then begin inc(Tel);exit;end; for i:=1 to 3 do Find(mas[digit,i],count+1); end; begin assign(f1,input); reset(f1); read(f1,n); close(f1); find(N,1); assign(f2,output); rewrite(f2); write(f2,Tel); close(f2); end. |