dinner_shuffles方法应该将n晚餐客人的所有可能安排作为字符串向量返回。使用的名称应该是构造函数中指定的前n个名称。
字符串的末端代表圆桌的相邻端椅。
晚餐客人安排的顺序没有说明。
这是一个简单的例子。如果晚餐的客人是abcde,那么dinner_shuffles(3)
的结果将是:
ABC
ACB
BAC
BCA
驾驶室
CBA
晚餐客人姓名是一个字符串
即使知道定义这种递归关系的等式也非常有用,谢谢
**更新:我已经发现Fibonacci序列的组合数如下:F(n)= F(n-1)+ F(n-2) - 2. I' m c ++的新手,我不确定如何用字母表示来形象化。
答案 0 :(得分:0)
即使知道定义这种递归关系的等式也非常有用,谢谢
等式类似于this:
这个问题是一样的,通过检查是否有1个人站立,只剩下一个选择, 否则产生下一个座位可以坐的所有安排。
如果它仍然没有意义,请尝试单独执行this简化代码。
否则,请看一下这个解决方案:
#include <iostream>
#include <vector>
using namespace std;
vector<string> arrangements;
class Table
{
public:
string seated = "";
string notSeated = "";
Table(string n);
vector<string> dinner_shuffles(int n);
};
Table::Table(string n)
{
seated = "";
notSeated = n;
}
vector<string> Table::dinner_shuffles(int n)
{
//The names used should be the first n names as designated in the constructor.
notSeated = notSeated.substr(0, n);
if (notSeated.length() == 1)
{
arrangements.push_back(seated+notSeated);
}
for (int i = 0; i < notSeated.length(); i++)
{
Table newArrangement(notSeated.substr(0,i) + notSeated.substr(i+1, notSeated.length()));
newArrangement.seated = seated + notSeated[i];
newArrangement.dinner_shuffles(n);
}
//return all possible arrangements of n dinner guests as a vector of strings.
return arrangements;
}
int main()
{
//dinner guest names are fed in as a string
string notSeated = "abcde";
Table table(notSeated);
vector<string> vals = table.dinner_shuffles(3);
//abc, acb, bac, bca, cab, cba
for (int i = 0; i < vals.size(); i++){
cout << vals[i] << endl;
}
return 1;
}