问题标题: 酷町堂:排列组合怎么写?

0
0
已解决
汪宇航
汪宇航
新手启示者
新手启示者

有上过排列组合的人吗?有请发个讲义过来

ps:采纳者有大奖!看豆子数量!


0
已采纳
曹灿阳
曹灿阳
初级天翼
初级天翼

方法1:

//1. 排列 
int ans[1010];
bool used[1010];
void DFS(int t){
    if(t>r){//r表示排列的元素数量 
        //1~n的r个元素的排列已经生成 
        return;
    }
    for(int i=1;i<=n;i++){
        if(used[i]==0){
            ans[t]=i;
            used[i]=true;
            DFS(t+1);
            used[i]=false;
        }
    }
}
主函数内调用:DFS(1) 
//2. 组合 
int ans[1010];
bool used[1010];
void DFS(int t,int last){
    if(t>r){//r表示排列的元素数量 
        //1~n的r个元素的组合已经生成 
        return;
    }
    for(int i=last+1;i<=n;i++){
        if(used[i]==0){
            ans[t]=i;
            used[i]=true;
            DFS(t+1,i);
            used[i]=false;
        }
    }
}
主函数内调用:DFS(1,0) 

方法2(只有排列,没有组合)

头文件:
#include <algorithm>
主体框架: 
int a[1010];
do{
    for(int i=1;i<=r;i++){
        //1~n的r个元素的排列生成了 
        //若r是n,则是全排列 
        //若r不是n,则会有重复 
    }
}while(next_permutation(a+1,a+1+n));

 

0
李雨彤
李雨彤
资深光能
资深光能

很简单:

一维数组:

for(int i=1;i<=n;i++){

    for(int j=i+1;j<=n;j++{

           if(a[i]>a[j]){

                swap(a[i],a[j]);

           }

    }

}

0
李雨彤
李雨彤
资深光能
资深光能

很简单:

一维数组:

for(int i=1;i<=n;i++){

    for(int j=i+1;j<=n;j++{

           if(a[i]>a[j]){

                swap(a[i],a[j]);

           }

    }

}

0
李雨彤
李雨彤
资深光能
资深光能

其实你可以定义一个字符串,然后用sort排序,注意要加头文件

0
0
黄硕梁
黄硕梁
初级天翼
初级天翼

用循环就能搞定

for(i(1--n)){

    for(int j(i+1--n){

        if(a[i]大于(小于)a[j])

            swap(a[i],a[j]);

    }

}

或者用sort

一条语句

sort(a+1,a+1+n,cmp);

a是数组名

n是数字个数

cmp要看情况加,这个是排序规律

0
黄硕梁
黄硕梁
初级天翼
初级天翼

用循环就能搞定

for(i(1--n)){

    for(int j(i+1--n){

        if(a[i]大于(小于)a[j])

            swap(a[i],a[j]);

    }

}

或者用sort

一条语句

sort(a+1,a+1+n,cmp);

a是数组名

n是数字个数

cmp要看情况加,这个是排序规律,而且是bool

0
褚俊皓
褚俊皓
新手天翼
新手天翼
排列组合课后讲义
一、什么是全排列
定义:从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
比如3的全排列就是
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
有六种不同的排列顺序

n个数字的全排列有:n!个。
如何思考这一类问题?
1、n个数字的全排列,看成有n个位置,我们从第一个位置到第n个位置来填数字
2、第一个位置,有n个选择, 第二个位置,不能选择和第一个位置相同的数,有n-1个选择, 第三个位置,不能选择和前两个位置相同的数,有n-2个选择…

(课堂题代码就不发了)

我要回答