2776 - 站队组合
有n个人,从中选出m(m<=n)个人进行站队,问有多少种站队的方法。
题目输入
输入一行: 两个正整数n和m。
题目输出
输出1行:一个正整数,全排列方案数。
输入/输出样例
题目输入
5 3
题目输出
60
C语言解答
#include<stdio.h> #include<stdlib.h> int m,n,sum; int a[10],p[10]; void out(){ for(int i=1;i<=m;i++){ printf("%d",a[i]); } puts(""); } int dfs(int x){ for(int i=1;i<=n;i++){ if(p[i]==0){ a[x]=i; p[i]=1; if(x==m){ sum++; //out(); } else{ dfs(x+1); } p[i]=0; } } return 0; } int main(){ scanf("%d%d",&n,&m); dfs(1); printf("%d\n",sum); return 0; }
C++解答
#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; int n,a[1000],b[1000]={0},h=0,m; int work(int k) { if(k==n+1){ /*for(int i=1;i<=n;i++) cout << a[i]; cout << endl;*/ ++h; } else for(int i=1;i<=m;++i) { if(!b[i]) { b[i]=1; a[k]=i; work(k+1); b[i]=0; } } } int main() { cin >> m >>n; work(1); cout<< h; return 0; }