(枚举)算法竞赛入门经典(7.1.1)除法

#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int n{},
    arr[10]{};
void cck(int p,bool *flag)
{
    int sum=p*n,
        ans=p*n,
        hd=9;
    if(sum>98765||sum<1234)
        return;
    if(!(sum/10000))hd--;
    bool flag2[10];
    for(int i=0;i<10;i++)flag2[i]=flag[i];
    for(int i=hd;i>=5;i--){
        arr[i]=sum%10;
        sum/=10;
        if(flag2[arr[i]])return;
        flag2[arr[i]]=1;
    }
    printf("%d/%d=%d\n",ans,p,n);
}
void recursion(int p,int row,bool *flag)
{
    if(row==5){
        cck(p,flag);
        return;
    }
    for(int i=0;i<10;i++){
        if(!flag[i]){
            arr[4-row]=i;
            flag[i]=1;
            recursion(p*10+i,row+1,flag);
            flag[i]=0;
        }
    }
}
int main()
{
    bool flag[10]{};
    scanf("%d",&n);
    recursion(0,0,flag);
    return 0;
}



 

posted @ 2016-04-10 11:25  keshuqi  阅读(268)  评论(0编辑  收藏  举报