Консультация № 202537
06.04.2022, 14:53
0.00 руб.
0 0 0
Здравствуйте! У меня возникли сложности с таким вопросом:
//Шахматная ассоциация решила оснастить всех своих сотрудников такими телефонными номерами, которые бы
//набирались на кнопочном телефоне ходом коня.Например, ходом коня набирается телефон 340 - 49 - 27. При этом телефонный номер не может
// начинаться ни с цифры 0, ни с цифры 8.
//7 8 9
//4 5 6
//1 2 3
//0
//Напишите программу, определяющую количество телефонных номеров длины N,
//набираемых ходом коня.
//Входные данные
//Во входном файле записано целое число N(1 ? N ? 100).
//Выходные данные
//Выведите в выходной файл искомое
//количество телефонных номеров.
//Пример входного файла
//2
//Пример выходного файла
//16

#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int n;
long nNum = 0;
char i;

void show(string s) // функция
{ // show() позволяет отобразить скрытые выбранные элементы
if (s.length() == n) // возвращает число знаков в текущий string
{
nNum++;
}
else
{
switch (s[s.length() - 1])
{
case '0': // возможные цифры выбора при нажатии на 0
show(s + '6');
show(s + '4');
break;

case '1': // возможные цифры выбора при нажатии на 1
show(s + '6');
show(s + '8');
break;

case '2': // возможные цифры выбора при нажатии на 2
show(s + '7');
show(s + '9');
break;

case '3': // возможные цифры выбора при нажатии на 3
show(s + '4');
show(s + '8');
break;

case '4': // возможные цифры выбора при нажатии на 4
show(s + '0');
show(s + '3');
show(s + '9');
break;

case '6': // возможные цифры выбора при нажатии на 6
show(s + '0');
show(s + '1');
show(s + '7');
break;

case '7': // возможные цифры выбора при нажатии на 7
show(s + '2');
show(s + '6');
break;

case '8': // возможные цифры выбора при нажатии на 8
show(s + '1');
show(s + '3');
break;

case '9': // возможные цифры выбора при нажатии на 9
show(s + '2');
show(s + '4');
break;

}
}
}

int main()
{
fstream f("input.in");// поток для чтения и записи, файл в режиме чтения.
f >> n; // читаем
for (i = '1'; i <= '9'; i++)
{
if (!(i == '5' || i == '8')) show(string(1, i));
}
f.close();
f.open("output.out", ios::out); // файл в режиме записи
f << nNum << " "; // записываем
f.close();
system("pause");
return 0;
}
У меня выходит ошибка когда я пытаюсь сделать работу с файлами(чтение и запись), но если делать без них ошибки нет, код жалуется на исключение. Помогите решить проблему пожалуйста.
Ошибка здесь
case '6': // возможные цифры выбора при нажатии на 6
show(s + '0'); ////////
или здесь
case '0': // возможные цифры выбора при нажатии на 0
show(s + '6'); //////////

Обсуждение

Форма ответа