题意是给你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。