求7个数字的排列问题的代码

时间:2008-05-10 09:59:19   来源:论坛整理  作者:  编辑:chinaitzhe
7个数进行排列,例如:1、2、3、4、5、6、7
要求是2必须在3前面,3必须在6前面,求排列方法及排列的个数。
求C或c 的程序代码

网友回复:
C/C code





Code highlighting produced by Actipro CodeHighlighter (freeware)

http://www.CodeHighlighter.com/





//数学计算7!=5040

//3!=6

//所以结果为7!/3!=840

#include <iostream>

using namespace std;

typedef void (__stdcall *PROCESS_FUNCTION)(int *, int);

int cnt = 0;

void __stdcall foo(int* t, int n)

{

    int        mark[7];

    int        curr = 0;

    int        i;

    for (i = 0; i < n;   i)

        if (t[i]==2||t[i]==3||t[i]==6)

            mark[curr  ]=t[i];

    if (mark[0]<mark[1]&&mark[1]<mark[2])

    {

        for (i = 0; i < n;   i)

            cout << t[i];

        cout << endl;

          cnt;

    }

}

void perm_impl(int* data, int n, int curr, PROCESS_FUNCTION ope)

{

    if (curr == n - 1)

    {

        ope(data, n);

    }

    else

    {

        for (int i = curr; i < n;   i)

        {

            int t;

            t = data[curr], data[curr] = data[i], data[i] = t;

            perm_impl(data, n, curr 1, ope);

            t = data[curr], data[curr] = data[i], data[i] = t;

        }

    }

}

void perm(int n, PROCESS_FUNCTION ope)

{

    int* t = new int[n];

    for (int i = 0; i < n;   i)

        t[i] = i 1;

    perm_impl(t, n, 0, ope);

    delete[] t;

}



int main()

{

    perm(7, foo);

    cout << cnt << endl;

}


网友回复:标记一下
网友回复:mark
网友回复:
引用楼主 HEROWANG 的帖子:
7个数进行排列,例如:1、2、3、4、5、6、7
要求是2必须在3前面,3必须在6前面,求排列方法及排列的个数。
求C或c 的程序代码


我想可以这样做:
用一个数组保存要进行排列的数,只要保证数组中的元素2的下标小于元素6的下标,元素3的下标大于元素6的下标,应该就可以实现了。排列的个数就很好办了。
网友回复:
引用 4 楼 xiaooqiang 的回复:
引用楼主 HEROWANG 的帖子:
7个数进行排列,例如:1、2、3、4、5、6、7
要求是2必须在3前面,3必须在6前面,求排列方法及排列的个数。
求C或c 的程序代码


我想可以这样做:
用一个数组保存要进行排列的数,只要保证数组中的元素2的下标小于元素6的下标,元素3的下标大于元素6的下标,应该就可以实现了。排列的个数就很好办了。



也就是1楼的程序实现的。
关键字:数字,排列,问题,代码,

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面