UVa 725 - Division

#include<iostream>
#include<cstdio>
#include<set>
using namespace std;
set<int>num[7];
int n,cnt,x,y[7];
bool z;
void judge(){
    x=n*y[1];
    if(x>98765){
        z=true;
        return;
    }
    num[1].insert(x/10000);
    num[1].insert(x%10000/1000);
    num[1].insert(x%1000/100);
    num[1].insert(x%100/10);
    num[1].insert(x%10);
    if(num[1].size()==10){
        printf("%05d / %05d = %d\n",x,y[1],n);
        cnt++;
    }
    num[1].clear();
    return;
}
void find(int k){
    for(int i=0;i<10;i++){
        y[k]=y[k+1];
        num[k]=num[k+1];
        while(num[k].find(i)!=num[k].end()&&i<9) i++;
        if(num[k].find(i)==num[k].end()){
            y[k]*=10;
            y[k]+=i;
            num[k].insert(i);
            if(k-1) find(k-1);
            else judge();
            if(z) return;
        }
    }
    return;
}
int main(){
    int t=0;
    while(cin>>n&&n){
        cnt=0;
        z=false;
        if(t++) cout<<endl;
        find(5);
        if(!cnt) cout<<"There are no solutions for "<<n<<"."<<endl;
    }
    return 0;
}


你可能感兴趣的:(uva)