除除除
Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^
题目描述
给出x,n,问在1到n这n个数字中任选几个的数字,然后由这几个数字组合成的整数中有多少个可以被x整除。
比如n = 3,x = 1时可以组成的整数有1,2,3,12,21,13,31,23,32,123,132,213,231,321,312,显然这些都可以被x整除。
故n = 3,x = 1时,答案为15。
比如n = 3,x = 1时可以组成的整数有1,2,3,12,21,13,31,23,32,123,132,213,231,321,312,显然这些都可以被x整除。
故n = 3,x = 1时,答案为15。
输入
多组输入,每组输入两个正整数x,n(1 <= x <= 100000,1 <= n <= 9)
输出
对于每组数据输出一个整数代表答案。
示例输入
1 2 2 2
示例输出
4 2
提示
来源
zmx
示例程序
#include<bits/stdc++.h>
using namespace std;
int num=0;
int n,x;
int vis[100];
int solve(int i,int x)
{
if(i%x==0)
num++;
i=i*10;
for(int j=1; j<=n; j++)
{
if(!vis[j])
{
vis[j]=1;
i=i+j;
solve(i,x);
i=i-j; //i要回溯
vis[j]=0;
}
}
}
int main()
{
while(~scanf("%d%d",&x,&n))
{
memset(vis,0,sizeof(vis));
num=0;
for(int i=1; i<=n; i++)
{
vis[i]=1;
solve(i,x);
vis[i]=0; //还原,回溯
}
printf("%d\n",num);
}
}