tampaks
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору Где тут может бытьл ошибка? Условие: «Шахматный» телефонный номер. Условие: Телефонный номер называется «шахматным», если его цифры набираются на телефонном кнопочном номеронабирателе ходом шахматного коня. Написать программу, подсчитывающую, сколько можно набрать различных семизначных «шахматных» номеров, начинающихся с заданной цифры. 123 456 789 0 Программа должна выводить полученый номер на экран и в файл output.txt #include <stdio.h> //массив numb[i][j] со списком цифр, на которые мы можем попасть из цифры с номером i int numb[10][3]={ {4,6,-1}, //из 0 можно попасть в 4 и 6 {6,8,-1}, {7,9,-1}, {4,8,-1}, {3,9,0}, //из 4 можно попасть в 3,9 и 0 {-1}, //а из 5 никуда нельзя {1,7,0}, {2,6,-1}, {1,3,-1}, {2,4,-1} }; //процедура возвращает количество вариантов шахматных номеров длины k, начинающихся с цифры n int phone(int n,int k){ int a=0; if (k==1) return 1; //если длина номера 1 - то он и есть 1 for(int i=0;numb[n][i]!=-1&&i<3;i++){ a+=phone(numb[n][i],k-1); //если больше 1, то вызываем эту же функцию с уменьшенной на единицу длиной номера для каждой из цифр, в которую можем попасть из данной цифры n } return a; } int main(){ int first_digit; printf("Enter first digit of number: "); scanf("%d",&first_digit); //спрашиваем первую цифру printf("Quantity of chess numbers: %d\n",phone(first_digit,7)); //выдаем результат; можно попроверять для более коротких номеров, заменяя 7 на нужное количество цифр return 0; } |