求助一本通1650:【例 3】组合,哪里错了?
查看原帖
求助一本通1650:【例 3】组合,哪里错了?
429040
xmmz517787023楼主2021/2/27 11:26

题目


【题目描述】 给出组合数 C(n,m) 表示从 n 个元素中选出 m 个元素的方案数。例如 C(5,2)=10,C(4,2)=6。可是当 n,m 比较大的时候,C(n,m) 很大。于是 xiaobo 希望你输出 C(n,m)modp 的值。

【输入】 输入数据第一行是一个正整数 T,表示数据组数;

接下来是 T 组数据,每组数据有 3 个正整数 n,m,p。

【输出】 对于每组数据,输出一个正整数,表示 C(n,m)mod p 的结果。

【输入样例】 2 5 2 3 5 2 61 【输出样例】 1 10


错误代码:

#include<bits/stdc++.h>
using namespace std;
long long n,r,p,num=0;
int a[110];
int v[110];
void dfs(int k) {
	if(k==r+1) {
		num++;
	} else {
		for(int i=a[k-1]+1; i<=n; i++) {
			if(v[i]==1) {
				v[i]=0;
				a[k]=i;
				dfs(k+1);
				a[k]=0; 
				v[i]=1;
			}
		}
	}
}
void mai(){
	scanf("%d%d%d" ,&n,&r,&p);
	for(long long i=1; i<=n; i++) {
		v[i]=1;
	}
	v[0]=0;
	dfs(1);
	cout<<num%p<<endl;
	num=0;
	return;
}
int main(){
	int gg;
	cin>>gg;
	for(int i=1;i<=gg;i++){
		mai();
	}
	return 0;
}
2021/2/27 11:26
加载中...