2776 - 站队组合

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

有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;
}