首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ Recursion:宴会座位安排

C++ Recursion:宴会座位安排
EN

Stack Overflow用户
提问于 2018-04-01 21:02:04
回答 1查看 1.2K关注 0票数 0

dinner_shuffles方法应该返回n个晚餐客人的所有可能的安排,作为字符串的向量。使用的名称应该是构造函数中指定的首n个名称。

字符串的末端代表圆桌的相邻端椅。

宴会安排的顺序没有具体说明。

下面是一个简单的例子。如果晚餐客人是abcde,那么dinner_shuffles(3)的结果将是:

abc acb bac bca 驾驶室 cba

  • 晚餐客人的名字被填成字符串。
  • 即使知道定义这种递归关系的方程式,也会很有帮助,谢谢

**更新:我发现Fibonacci序列对于组合数如下: F(n) = F(n-1) + F(n-2) - 2。我是c++的新手,我不确定如何用字母表示来可视化这个序列。

EN

回答 1

Stack Overflow用户

发布于 2018-04-02 07:25:37

即使知道定义这种递归关系的方程式,也会很有帮助,谢谢

这个方程类似于

  • 如果字符串的长度为1,则返回安排(大小写)。
  • 否则,让每个字符处于第一个位置,递归调用字符串的其余部分,删除该字符。

这个问题是一样的,只要看看是否有1人站着,便只剩下一个选择,否则便可以安排下一个座位。

如果的简化代码仍然没有意义的话,试着在这里进行一步。

否则,请查看此解决方案:

代码语言:javascript
运行
复制
#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;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49602580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档