Предлог: Я новичок в кодировании c ++ и знаю массивы и строки. Этот профессор показал, как вводить и выводить в файлы, и дал нам следующее задание:
Вопрос о назначении: Введите число в файле. Теперь представьте, что есть лестница с введенным количеством шагов. Вы можете сделать один шаг вверх и обозначить это как 'u', или вы можете сделать два шага вверх и обозначить это как 'd'. Найдите все возможные комбинации этого типа и запишите их в файл.
Пример: Для n = 1 вывод должен быть 'u'; Для n = 2 вывод должен быть 'uu d'; Для n = 3 результат должен быть 'uuu ud du' и т. Д.
Мой мыслительный процесс: Так что это в основном ряд Фибоначчи. Так что, как и ряд Фибоначчи, я подумал о рекурсивном алгоритме. Вот что я придумал ...
Код
#include<iostream>
#include<fstream>
using namespace std;
void staircase(int num, int count, char* c, int index, ofstream &file)
{
char c1[num], c2[num];
for (int i = 0;i < num;i++) {
c1[i] = c[i];
c2[i] = c[i];
}
if (num - count == 2) {
c1[index] = 'd';
c2[index] = 'u';
c2[index + 1] = 'u';
file.open("output.txt", ios::app);
file << c1 <<" ";
file << c2 <<" ";
file.close();
return;
}
if (num - count == 1) {
c2[index] = 'u';
file.open("output.txt", ios::app);
file << c2 <<" ";
file.close();
return;
}
if (num - count > 2) {
c1[index] = 'd';
c2[index] = 'u';
staircase(num, count + 2, c1, index+1,file);
staircase(num, count + 1, c2, index+1,file);
}
}
int main(){
int num;
cout<<"Input total number of stairs: ";
cin>>num;
fstream myfile;
myfile.open("input.txt");
myfile<<num;
myfile.close();
cout<<"Input is saved in file Directory ";
char c[num];
ofstream file;
file.open("output.txt");
staircase(num, 0, c, 0, file);
}
Проблема: Когда я написал это без кода файла и все это нормально, и командная строка показала все возможные результаты. Я также заметил, что для n = 1 и n = 2 он даже ничего не печатает в файле. Я чувствую, что что-то упускаю с fstream и не могу указать на это. Я пытался найти Google и StackOverflow. Спасибо за помощь. Также ниже приводится версия без каких-либо файлов.
#include<iostream>
#include<fstream>
using namespace std;
void staircase(int num, int count, char* c, int index)
{
char c1[num], c2[num];
for (int i = 0;i < num;i++) {
c1[i] = c[i];
c2[i] = c[i];
}
if (num - count == 2) {
c1[index] = 'd';
c2[index] = 'u';
c2[index + 1] = 'u';
for(int i=0;i<=index;i++)
cout<<c1[i];
cout<<" ";
for(int i=0;i<=index+1;i++)
cout<<c2[i];
cout<<" ";
return;
}
if (num - count == 1) {
c2[index] = 'u';
for(int i=0;i<index+1;i++)
cout<<c2[i];
cout<<" ";
return;
}
if (num - count > 2) {
c1[index] = 'd';
c2[index] = 'u';
staircase(num, count + 2, c1, index+1);
staircase(num, count + 1, c2, index+1);
}
}
int main(){
int num;
cout<<"Input total number of stairs: ";
cin>>num;
cout<<"Input is saved in file Directory ";
char c[num];
staircase(num, 0, c, 0);
}