Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
LifeWind
4 / 4 / 1
Регистрация: 13.09.2012
Сообщений: 36
#1

Шахматный телефонный номер через рекурсию(с Паскаля на C++) - C++

22.06.2013, 18:53. Просмотров 510. Ответов 0
Метки нет (Все метки)

Здравствуйте, вот задача: Телефонный номер называется “шахматным”, если его цифры набираются на телефонном кнопочном номеронабирателе ходом шахматного коня. Написать программу, подсчитывающую, сколько можно набрать различных семизначных “шахматных” номеров, начинающихся с заданной цифры.(Задачу надо сделать через рекурсивную функцию).
Есть код на паскале, а мне нужно на C++. Помогите переделать пожалуйста. В mas - варианты хода для чисел от 0 до 9, -1 означает что хода нет. Если N=5, то таких номеров нет.
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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));
 
 
var
  N:integer;
  Tel:integer;
 
 
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
writeln('Введите число: ')
read(N);
find(N,1);
writeln(Tel);
readln;
end.
Добавлено через 2 часа 38 минут
Вот, я всё-таки сделал:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
 
using namespace std;
 
const int mas[10][3] = {
    {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}
};
 
void find(int digit, int count, int &Tel)
{
    if (digit == -1)
        return;
    if (count == 7) {
        Tel++;
        return;
    }
    for (int i = 0; i < 3; ++i)
        find(mas[digit][i], count + 1, Tel);
    return;
}
void main()
{
    setlocale(LC_ALL, "Russian" );
    int Tel = 0;
    int n;
    cout <<"Введите первую цифру номера: ";
    cin >> n;
    if (!(0<=n && n<=9))
    {
        cout<<endl<<"Цифра должна быть в промежутке от 0 до 9"<<endl;
        return;
    }
    find(n, 1, Tel);
    cout << endl <<"Количество номеров с заданной цифры: ";
    cout << Tel <<endl;
    return;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2013, 18:53
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Шахматный телефонный номер через рекурсию(с Паскаля на C++) (C++):

Шахматный номер, рекурсия - C++
Вот есть задачка, нужно решить ее с применением рекурсивной функций, никак не могу додуматься как это сделать. Телефонный номер называется...

Программа телефонный номер - C++
Тут столкнулся с проблемой. Программа не выводит телефонный номер, при вводе русских символов, реагирует только на английский ввод. Не...

Создать структуру, содержаую данные фамилию, имя, дату рождения и телефонный номер - C++
Создать структуру, содержаую данные фамилию, имя, дату рождения и телефонный номер. Сортировать по номерам телефона и, если вводить...

Факториал через рекурсию - C++
Подскажите, как можно вычислить факториал некоторого числа через рекурсию функций (через цикл либо другим методом не интересует). Есть...

поиск через рекурсию - C++
С помощью массива структур описать каталог компьютерных игр, предусмотрев следующие характеристики: название, производитель, год издания,...

последовательность через рекурсию - C++
нужна ваша помощь задача такая: написать рекурсивную функцию для ввода последовательности чисел и вывода ее на экран в обратном...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.06.2013, 18:53
Привет! Вот еще темы с ответами:

Число из 10-ой в 2-ю ,через рекурсию. - C++
Доброго дня. Требуется написать программу (из 2-ой в 10-ю) .С использованием рекурсии. Выход данной программы 0. Что следует поправить? ...

НОД через рекурсию - C++
Нужно написать программу для нахождения НОД через рекурсию по такому алгоритму: 1) задать два числа; 2) если числа равны, то взять...

Найти тангенс x через рекурсию - C++
/*Вычисление тангенса задано формулой Найти тангенс(к примеру,пи/3, n=4) tg(x) = ---------x----------- x^2 ...

Не высчитывает корень через рекурсию - C++
double kor(double a) { double Xn=0.5*(1+a); if (fabs(Xn-a)&gt;0.0001) return a; else return Xn=0.5*(kor(a-1)+a/kor(a-1)); } void...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru