首页 > 其他分享 >排列&组合

排列&组合

时间:2022-09-07 22:12:00浏览次数:53  
标签:begin 排列 cout 组合 int sum num data

排列:

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e3 +5;
#define swap(a,b){int temp = a ; a = b ; b = temp;}
int data[maxn];
void so(){
    for(int i = 0 ; i <= maxn ; i++){
        data[i]=i+1;
    }
}
void perm(int begin , int end,int &num){
    if(begin == end){
        for(int i = 0 ; i <= end ; i++){
            cout<<data[i]<<" ";
        }
        num++;
        cout<<endl;
    }
    else
        for(int i = begin ; i <=end ; i++){
            swap(data[begin],data[i]);
            perm(begin + 1 , end,num);
            swap(data[begin],data[i]);
        }
}
int main(){
    so();
    int n;
    cin>>n;
    int num = 0;
    perm(0,n-1,num);
    cout<<num;
    return 0;
}

组合:

#include<bits/stdc++.h>
using namespace std;
const int maxn =1e5 +5;
int data[maxn];
int flag = 1;
int ans[maxn];
int cnt=0;
int n , m ;
int j = 1;
void f(int n,int m,int flag,int &sum){
 if(flag == m+1){
  for(int i = 0 ; i <= n ; i++){
   if(ans[i]!=0){
    cout<<ans[i]<<" ";
   }
  }
  sum++;
  cout<<endl;
 }
 else{
 for(int i = j; i <= n ; i++){
  if(data[i]!=0){
   ans[i]=i;
   j = i;
   data[i]=0;
   f(n,m,flag+1,sum);
   ans[i]=0;
   data[i]=i;
  }
 }
 }
}
void so(){
 for(int i = 0 ; i <= n ; i++)
  data[i]=i;
}
int main()
{
int sum=0;
 cin>>n>>m;
 so();
 f(n,m,flag,sum);
 cout<<sum;
 return 0;
}

 

标签:begin,排列,cout,组合,int,sum,num,data
From: https://www.cnblogs.com/ganl/p/16667473.html

相关文章

  • 11.1组合
    #练习#圆环#属性:记录大圆半径,小圆半径#实现计算面积:圆环的面积大圆面积-小圆面积#实现计算周长:大圆周长+小圆周长#frommathimportpi####classCircle:......
  • python3--重新排列单词间的空格
    class Solution:    def reorderSpaces(self, text: str) -> str:        count=text.count(' ')#字符串中空格的数量        li=text.s......
  • 1592. 重新排列单词间的空格
    1592.重新排列单词间的空格给你一个字符串text,该字符串由若干被空格包围的单词组成。每个单词由一个或者多个小写英文字母组成,并且两个单词之间至少存在一个空格。......
  • LeetCode 46 全排列
    classSolution{public:vector<vector<int>>res;vector<int>path;boolused[10];voiddfs(vector<int>&nums){if(path.size()==nu......
  • P3223 (排列组合)
     题目传送门题目大意:略题目分析:本题类似于当小球遇上盒子。[\(1\)]:我们可以假设所有老师均为男生,利用插板法,我们可知两个女生可以放入一个男生两侧,又因为每个人......
  • 组合控件——顶部导航栏——溢出菜单OverflowMenu
       点击导航栏右边的三点图标,会弹出溢出菜单OverflowMenu,意指导航栏不够放了、溢出来了。 溢出菜单的菜单项也在res\menu下面的XML文件中定义,不同之处是多了个sh......
  • LeetCode 216 组合总和 III
    classSolution{public:vector<vector<int>>res;vector<int>path;intsum=0;voiddfs(intstart,intk,intn){if(path.siz......
  • LeetCode 40 组合总和 II
    classSolution{public:vector<vector<int>>res;vector<int>path;intsum;voiddfs(intstart,vector<int>&candidates,inttarget){......
  • LeetCode 19 组合总和
    classSolution{public:vector<vector<int>>res;vector<int>path;intsum=0;voiddfs(intstart,vector<int>&candidates,inttarget){......
  • NC15128 老子的全排列呢
    题目原题地址:老子的全排列呢题目编号:NC15128题目类型:DFS时间限制:C/C++1秒,其他语言2秒空间限制:C/C++32768K,其他语言65536K1.题目大意输出1到8的全排列2.题目......