dfs搜索+优化
优化方法:减少取余次数,取余运算太耗时了
#include <stdio.h>
#include <string.h>
int a[35],f,m,n,ans[35];
long long mod(int x)
{
long long ans=0;
for(int i=0;i<x;i++)
{
ans=ans*10+a[i];
if(!(i%12))ans%=x;
}
return ans%x;
}
int dfs(int cur)
{
if(f)return 1;
if(cur==m){
if(!f)
for(int i=0;i<m;i++)ans[i]=a[i];f=1;return 1;}
if(!cur)
for(int i=1;i<=9;i++)
{
a[cur]=i;
if(cur+1<n)dfs(cur+1);
else
{if(mod(cur+1)==0)dfs(cur+1);}
}
else
for(int i=0;i<=9;i++)
{
a[cur]=i;
if(cur+1<n)dfs(cur+1);
else
{
if(mod(cur+1)==0)
dfs(cur+1);
}
}
return 0;
}
int main()
{
int T,c=0;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
memset(a,0,sizeof(a));
f=0;
printf("Case %d: ",++c);
dfs(0);
if(f)
{
for(int i=0;i<m;i++)printf("%d",ans[i]);
}
else
printf("-1");
printf("\n");
}
return 0;
}