【问题标题】:Permutations of a specific set of numbers from n to m从 n 到 m 的一组特定数字的排列
【发布时间】:2021-12-30 17:05:35
【问题描述】:
#include <iostream>
using namespace std;

int n, m, x[20], p[20];
void display(){

for(int i = 1 ; i <= n; ++i)
    cout << x[i] << ' ';
cout << "\n";

}
void bkt(int k){

for(int i = n; i <= m; ++i)
if(!p[i]){

    x[k] = i;
    p[i] = 1;
    if(k<n)
        bkt(k+1);
        else
        display();
    p[i] = 0;
  }

}

int main()
{ cin >> n >> m;
bkt(1);



    return 0;
}

这段代码应该做从 n 到 m 的排列,但它不起作用,我不知道我做错了什么。我尝试了一组示例,例如 4 和 6,它应该会显示

4 5 6 
4 6 5 
5 4 6 
5 6 4 
6 4 5 
6 5 4

但它不会在控制台中显示任何内容,只返回 0。

【问题讨论】:

标签: c++


【解决方案1】:

代码存在很多问题,但您可以通过以下方式解决问题:

cin >> n >> m;  // get range

然后创建一个合适大小的向量

std::vector<int> v(m - n + 1);

然后用需要的值填充它

std::iota(std::begin(v), std::end(v), n);

然后在循环中生成所有排列

do {
  // ...
} while(std::next_permuation(std::begin(v), std::end(v));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 2020-01-31
    • 2012-11-04
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多