链接:https://ac.nowcoder.com/acm/contest/11471/B
来源:牛客网
群友们在玩一个游戏,共n个人在玩 每个人要在0-(n-1)中选一个数,注意每个数只能选择一次,
然后按照先后选择顺序拼成一个数,计算组成的数字是否可以整除k,
群友们想知道,如果选择方案不重复,最多有多少种情况可以整除k?
如果不可能整除k请输出-1;
题解:直接求排列就行了。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool vis[10];//0,9
int n;
int a[10];
ll k;
int main(){
scanf("%d%lld",&n,&k);
for(int i=0;i<n;i++) a[i]=i;
int cnt=0;
do{
ll now=0;
for(int i=0;i<n;i++){
now=now*10+a[i];
}
if(now%k==0) cnt++;
}while(next_permutation(a,a+n));
if(cnt==0) printf("-1\n");
else printf("%d\n",cnt);
return 0;
}