题意是给你N,打印出所有相除等于N的五位数(包含前导零),可以枚举后五位,计算量是10!/5!,然后乘N,一起检验10个数是否都出现。
AC代码:
#include <iostream>
using namespace std;
int N;
bool flag;
void check(int a,int b)
{
int cnt=0;
bool apear[15]={false};
int temp=b;
while(temp)
{
int t=temp%10;
temp/=10;
if(apear[t])
{
return;
}
apear[t]=true;
cnt+=1;
}
if(cnt!=5)return;
temp=a;
while(temp)
{
int t=temp%10;
temp/=10;
if(apear[t])
{
return;
}
apear[t]=true;
cnt+=1;
}
if((cnt<10&&apear[0]==false)||cnt==10)
{
printf("%d / %05d = %d\n", b, a, N);
flag=true;
}
}
void dfs(int index,int tol,int mp)
{
if(index==5)
{
check(tol,tol*N);
return;
}
for(int i=0;i<10;i++)
{
if(1&(mp>>i))continue;
dfs(index+1,tol*10+i,mp|(1<<i));
}
}
int main(){
int ju=0;
while(cin>>N)
{
if(N==0)break;
if(ju)cout<<endl;
else ju=1;
flag=false;
dfs(0,0,0);
if(flag==false)
{
cout<<"There are no solutions for "<<N<<"."<<endl;
}
}
return 0;
}
比较奇葩的是这个格式,在每一个N结果输出前加一个\n。