J'essaie d'apprendre le C++ et essayais de résoudre un problème où, étant donné un certain nombre de marches et le nombre de façons possibles de monter les marches, donne toutes les permutations des façons possibles de monter les marches. Ainsi, par exemple, s'il y a 5 marches à gravir et que je peux monter d'une marche à la fois, 2 marches à la fois ou 3 marches à la fois, je devrais imprimer toutes les permutations de 1, 2 et 3 qui ajouter jusqu'à 5: [1, 1, 1, 1, 1]
, [1, 1, 1, 2]
, ....
J'ai commencé avec ce code (ce n'est pas encore fait), mais j'obtiens cette erreur:
Undefined symbols for architecture x86_64:
"_num_steps(int, std::__1::vector<int, std::__1::allocator<int> >, std::__1::vector<std::__1::vector<int, std::__1::allocator<int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator<int> > > >, std::__1::vector<std::__1::vector<int, std::__1::allocator<int> >, std::__1::allocator<std::__1::vector<int, std::__1::allocator<int> > > >)", referenced from:
num_steps(int, std::__1::vector<int, std::__1::allocator<int> >) in num_steps-FTVSiK.o
ld: symbol(s) not found for architecture x86_64
Je ne comprends vraiment pas ce que je fais mal. J'apprécierais si je pouvais obtenir de l'aide. Merci!
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
using namespace std;
//prototypes
void _num_steps(int amount, vector<int> possible_steps, vector<vector<int>> steps_list, vector<vector<int>> result);
int sum(vector<int> steps_list);
void num_steps(int amount, vector<int> possible_steps);
//
//
//
void num_steps(int amount, vector<int> possible_steps) {
vector<vector<int>> result;
_num_steps(amount, possible_steps, {{}}, result);
//print_result(result);
}
int sum(vector<int> steps_list) {
int sum_of_steps(0);
for (auto step: steps_list) {
sum_of_steps += step;
}
return sum_of_steps;
}
void _num_steps(int amount, vector<int> possible_steps, vector<int> steps_list, vector<vector<int>> result) {
if (sum(steps_list) == amount) {
result.Push_back(steps_list);
return;
}
else if (sum(steps_list) >= amount) {
return;
}
for (auto steps: possible_steps) {
auto steps_list_copy = steps_list;
steps_list_copy.Push_back(steps);
_num_steps(amount, possible_steps, steps_list_copy, result);
}
cout << "yeah" << endl;
return;
}
int main(int argc, char* argv[]) {
num_steps(5, {1, 2, 3});
return 0;
}
Votre erreur de compilation vient du fait que votre signature pour la déclaration avant de _num_steps
ne correspond pas à la signature de votre définition de _num_steps
. le type de steps_list
ne correspond pas
Changez votre ligne de prototype en:
void _num_steps(int amount, vector<int> possible_steps, vector<int> steps_list, vector<vector<int>> result);
Les types dans la liste d'arguments d'une déclaration de fonction et sa définition doivent être les mêmes.
Les vôtres ne correspondent pas.
Déclaration:
void _num_steps(int amount, vector<int> possible_steps, vector<vector<int>> steps_list, vector<vector<int>> result);
Définition:
void _num_steps(int amount, vector<int> possible_steps, vector<int> steps_list, vector<vector<int>> result) { /* ... */ }