#include<cstdio> #include<string.h> #include<iostream> #include<algorithm> #include<vector> #include<queue> #include<map> #include<set> #include<math.h> #define ll long long using namespace std; const int maxn=1000; int A[maxn]; bool vis[maxn]; // 不可重复排列 int ans=0; void pailie(int i,int n){ if(i==n+1){ for(int j=1;j<=n;j++) printf("%d ",A[j]); putchar(10); ans++; return ; } for(int j=1;j<=n;j++){ if(!vis[j]){ vis[j]=1; A[i]=j; pailie(i+1,n); vis[j]=0; } } } int main(){ pailie(1,3); printf("%d\n",ans); return 0; } 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 6
#include<cstdio> #include<string.h> #include<iostream> #include<algorithm> #include<vector> #include<queue> #include<map> #include<set> #include<math.h> #define ll long long using namespace std; const int maxn=1000; int A[maxn]; //可重复排列 int ans=0; void pailie(int i,int n){ if(i==n+1){ for(int j=1;j<=n;j++) printf("%d ",A[j]); putchar(10); ans++; return ; } for(int j=1;j<=n;j++){ A[i]=j; pailie(i+1,n); } } int main(){ pailie(1,3); printf("%d\n",ans); return 0; } 1 1 1 1 1 2 1 1 3 1 2 1 1 2 2 1 2 3 1 3 1 1 3 2 1 3 3 2 1 1 2 1 2 2 1 3 2 2 1 2 2 2 2 2 3 2 3 1 2 3 2 2 3 3 3 1 1 3 1 2 3 1 3 3 2 1 3 2 2 3 2 3 3 3 1 3 3 2 3 3 3 27
#include<cstdio> #include<string.h> #include<iostream> #include<algorithm> #include<vector> #include<queue> #include<map> #include<set> #include<math.h> #define ll long long using namespace std; const int maxn=1000; int A[maxn]; int L[maxn]; bool vis[maxn]; // 数目限制排列 int ans=0; void pailie(int i,int n){ if(i==n+1){ for(int j=1;j<=n;j++) printf("%d ",A[j]); putchar(10); ans++; return ; } for(int j=1;j<=n;j++){ if(L[j]){ L[j]--; A[i]=j; pailie(i+1,n); L[j]++; } } } int main(){ L[1]=2; L[2]=1; L[3]=2; L[4]=6; L[5]=3; pailie(1,3); printf("%d\n",ans); return 0; }
1 1 2 1 1 3 1 2 1 1 2 3 1 3 1 1 3 2 1 3 3 2 1 1 2 1 3 2 3 1 2 3 3 3 1 1 3 1 2 3 1 3 3 2 1 3 2 3 3 3 1 3 3 2 18
#include<cstdio> #include<string.h> #include<iostream> #include<algorithm> #include<vector> #include<queue> #include<map> #include<set> #include<math.h> #define ll long long using namespace std; const int maxn=1000; int A[maxn]; //组合 从n个{1...n}中选m个 int ans=0; void Co(int m,int n,int k){ if(k==m+1){ for(int i=1;i<=m;i++) printf("%d ",A[i]); putchar(10); ans++; return ; } for(int i=A[k-1]+1;i<=n;i++){ A[k]=i; Co(m,n,k+1); } } int main(){ Co(3,5,1); printf("%d\n",ans); return 0; }
1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5 10
"AABBBC" 从中取三个元素,除去相同方案。每个方案可以有多个元素。
#include <stdio.h> #include <string.h> #include<iostream> using namespace std; int data[]={2,3,1}; int x[3]; char y[]="ABC"; int n; int ans=0; void f(int k,int m){//k是剩下的位置 是当前位置 //printf("%d %d\n",k,m); if(m==n&&k)return ; if(k==0){ for(int i=0;i<n;i++){ for(int j=0;j<x[i];j++){ printf("%c",y[i]); } } putchar(10); ans++; return ; } for(int i=0;i<=min(data[m],k);i++){ x[m]=i; f(k-i,m+1); x[m]=0; } } int main() { n=3; f(3,0); return 0; }