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

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

Восстановить пароль Регистрация
 
LifeWind
 Аватар для LifeWind
4 / 4 / 1
Регистрация: 13.09.2012
Сообщений: 36
22.06.2013, 18:53     Шахматный телефонный номер через рекурсию(с Паскаля на C++) #1
Здравствуйте, вот задача: Телефонный номер называется “шахматным”, если его цифры набираются на телефонном кнопочном номеронабирателе ходом шахматного коня. Написать программу, подсчитывающую, сколько можно набрать различных семизначных “шахматных” номеров, начинающихся с заданной цифры.(Задачу надо сделать через рекурсивную функцию).
Есть код на паскале, а мне нужно на 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.06.2013, 18:53     Шахматный телефонный номер через рекурсию(с Паскаля на C++)
Посмотрите здесь:

C++ Программа телефонный номер
Число из 10-ой в 2-ю ,через рекурсию. C++
НОД через рекурсию C++
Факториал через рекурсию C++
Шахматный номер, рекурсия C++
последовательность через рекурсию C++
поиск через рекурсию C++
C++ Создать структуру, содержаую данные фамилию, имя, дату рождения и телефонный номер

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 22:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru