暴力的例题。
大体思路:
枚举出fghij这个数,之后计算fghij * x (2 < x < 80) 判断得到的数是不是满足条件
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std;
#define LEN 80
#define MAXD 100
int array[LEN][MAXD]= {0};
int num[LEN] = {0};
void biao(){
for(int i = 1234; i <= 98765 ; i++){
int n = i;
int ok = 1;
int vis[10] = {0};
for(int j = 0; j < 5; j ++){ /*先判断各个位是否重复*/
int t = n % 10;
if(!vis[t]){
vis[t] = 1;
n = n / 10;
}
else if(vis[t]){
ok = 0;
break;
}
}
if(ok){
for(int j = 2 ; i * j <= 98765 ; j++){
int temp = i * j;
int _vis[10];
int _ok = 1;
memcpy(_vis,vis,sizeof(_vis));
for(int k = 0 ; k < 5 ; k++){
int t = temp % 10;
if(!_vis[t]){
_vis[t] = 1;
temp = temp / 10;
}
else if(_vis[t]){
_ok = 0;
break;
}
}
if(_ok) {
array[j][num[j]++] = i * j;
}
}
}
}
}
int main(){
biao();
int n;
int Case = 0;
while(scanf("%d",&n) && n){
if(Case > 0)
printf("\n");
Case++;
if(num[n]){
for(int i = 0 ; i < num[n] ; i++)
printf("%05d / %05d = %d\n",array[n][i],array[n][i] / n,n);
}
else
printf("There are no solutions for %d.\n",n);
}
return 0;
}