`

用全排列的方式生成一个数列的随机排列(C++实现)

 
阅读更多

Question: 

 

input :     n

 

output:    A random permutation of [0 ..  n-1]

 

ie:  

input: 5

output: 0 3 2 4 1 

 

// Type your C++ code and click the "Run Code" button!
// Your code output will be shown on the left.
// Click on the "Show input" button to enter input data to be read (from stdin).

#include <iostream>
using namespace std;

typedef vector<int> List;

// print series
void printList(List arr) {
    List::iterator it = arr.begin();
    while(it != arr.end()) {
        cout<<*it<<" ";
        it ++;
    }
    cout<<endl;
}

int ck = 0;

// base iteration function
void iterPermutation(List &list, int l, int h, List &ret, int &k) {    
    if(l > h) {
        k--;
        if(k == 0) ret = list;
        return;
    }
    for(int i = l; i <= h; i++) {
        swap(list[i], list[l]);
        iterPermutation(list, l+1, h, ret, k);
        swap(list[i], list[l]);
    }
}

// factorial of n
int factorial(int n) {
    if(n == 0) return 1;
    return n * factorial(n-1);
}

// generate a random permutation of [1 .. n-1]
List randomSeries(int n) {
    List vec;
    for(int i = 0; i < n; i++) vec.push_back(i);
    
    List ret;
    int r = rand() % factorial(n);
    iterPermutation(vec, 0, n-1, ret, r);
    
    return ret;
}

int main() {
    int n = 5;
    cout<<"n = "<<factorial(n)<<endl;
    printList(randomSeries(n));
    
    return 0;
}

 

 欢迎关注微信公众号——计算机视觉 

 

0
1
分享到:
评论

相关推荐

    斐波那契数列实现C++

    斐波那契数列实现的C++代码;代码易懂易扩展。

    整数分拆以及等差数列多重约束条件下全排列的生成法

    整数分拆与等差数列全排列生成法的探讨,是组合数学领域的一个重要议题,其核心在于将问题分解为可管理的数学模型,并通过算法和编程语言如MATLAB来实现。在探讨该问题时,需要对多个相关领域有深入理解,包括整数分...

    C++n个数全排列的算法

    以下是一个简单的C++代码实现全排列的示例: ```cpp #include #include using namespace std; void permute(vector&lt;int&gt;& nums, int start) { if (start == nums.size() - 1) { for (int num : nums) { cout...

    python——全排列数的生成方式

    Python中的全排列问题是一个经典的算法问题,涉及到排列组合与递归等概念。全排列是指从n个不同元素中取出n个元素,按照一定的顺序排成一列的所有可能情况。在这个问题中,我们需要生成从1到N的所有整数的全排列,并...

    C++斐波那契数列C++斐波那契数列

    C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++斐波那契数列C++...

    C++随机点名生成器实例代码(老师们的福音!)

    C++随机点名生成器的实现原理是通过使用rand()函数和Hash实现的。其中,rand()函数可以用来产生随机数,但是是属于伪随机数。为了使随机数生成器产生不同的随机数列,需要使用函数srand()进行初始化。 知识点2:...

    用java语言实现数字全排列

    题目描述:给定一个数列a1,a2,a3…an,输出他所有的全排列。 算法设计描述: 1、获取当前的一种排列,用start,end分别表示该排列的列头,列尾; 2、判断start是否和end相等,若相等,执行3,否则执行4; 3、将当前...

    菲波那切数列数组求法C++程序

    菲波那切数列(Fibonacci Sequence)是数学中一个非常著名的数列,它的定义是这样的:数列中的第一项F0为0,第二项F1为1,从第三项开始,每一项都等于前两项之和。用数学公式表示就是: F0 = 0 F1 = 1 Fn = Fn-1 + ...

    python练习fibonacci全排列

    在Python中,可以使用内置的`itertools`模块来简化全排列问题的解决,`itertools.permutations()`函数可以直接生成一个可迭代对象,包含了输入序列的所有排列。 总结起来,"python练习fibonacci全排列"这个主题涵盖...

    全排列数生成

    行,每行都是从1~N所有整数的一个全排列,各整数之间以空格分隔。各行上的全排列不重复。输出各行遵循“小数优先”原则, 在各全排列中,较小的数尽量靠前输出。如果将每行上的输出看成一个数字,则所有输出构成升序...

    【C++】斐波那契数列应用的一个实例

    【C++】斐波那契数列应用的一个实例。这是关于斐波那契数列的一个例子,用C++语言实现

    斐波那契数列c++.pdf

    给定的部分内容展示了一个使用C++编写的简单程序,用于生成斐波那契数列: ```cpp #include #include // 定义斐波那契数列生成函数 std::vector&lt;int&gt; generateFibonacci(int n) { std::vector&lt;int&gt; fibonacci(n...

    斐波那契数列-C++代码

    本代码使用C++语言书写,编译环境VS2013。...斐波那契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:0、1、1、2、3、5、8、13、21、…… 本代码是练习作品,如有错误或修改,请指正,感谢感谢。

    斐波那契数列与泰波那契数列的C++实现方法

    内容概要:本文主要讲述了使用C++实现斐波那契数列以及泰波那契数列的方法,通过动态规划的方式解决这一数学难题。文章首先介绍了斐波那契数列及其变体泰波那契数列的基本概念和递推关系,接着深入解释了dp状态方程...

    斐波那契数列及C++代码实现收藏学习.docx

    下面是一个使用C++编写的递归实现示例: ```cpp #include int fibonacci(int n) { if (n ) { return n; } return fibonacci(n - 1) + fibonacci(n - 2); } int main() { int n; std::cout 请输入要生成的...

    C++斐波那契数列的实现

    C++斐波那契数列的实现

    以下是一个简单的C++程序,用于生成斐波那契数列的前n项.pdf

    本文介绍了斐波那契数列的基本概念及其在自然界中的体现,并详细解析了一个使用 C++ 实现斐波那契数列的简单程序。此外,还讨论了该程序的时间复杂度和空间复杂度,并提到了更高效的计算方法以及斐波那契数列在不同...

    mips汇编语言实现斐波那契数列的排列

    2. 斐波那契数列的概念:斐波那契数列是一个数学概念,指的是一个无限的整数序列,每个数字都是前两个数字的和,通常用来描述生物体的生长模式和自然界中的自相似现象。本资源使用斐波那契数列作为示例,展示了...

    斐波那契数列c++实现(csdn)————程序.pdf

    在C++中,我们可以使用递归的方式来实现斐波那契数列。如给定的代码所示,`fib`函数接受一个整数`n`作为参数,返回第`n`个斐波那契数。在函数内部,首先检查`n`是否小于3,因为前两个斐波那契数都是1。如果`n`小于3...

    C++:斐波那契数列(迭代和递归)

    斐波那契数列是计算机科学中一个经典的概念,它在算法设计、数据结构和许多其他领域都有广泛应用。斐波那契数列定义如下:序列的前两个数字是0和1,之后的每个数字都是前两个数字的和。用数学公式表示就是: F(0) =...

Global site tag (gtag.js) - Google Analytics