表妹的题(回溯)

看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。 这个算式有多少种可能的正确填写方法?

View Code
#include<stdio.h>
#include<stdlib.h>
int x[10];
int ans;
bool Place(int k){
    int i=1;
    while(i<k){
        if(x[i]==x[k]) return false;
        i++;
    }
    return true;
}

bool IsOk(){
    return 100*(x[1]+x[4])+10*(x[2]+x[5])+(x[3]+x[6]) == 100*x[7]+10*x[8]+x[9];
}

void Solve(){
    int k=1;
    x[k]=0;
    while(k>0){
        do{
            x[k]++;
        }while(x[k]<10 && !Place(k));
        if(x[k]<10){
            if(k==9){
                if(IsOk()){
                    ans++;
                /*    int i;
                    for(i=1;i<10;i++){
                        printf("%d ",x[i]);
                    }
                    printf("\n");
                */
                }
            }
            else{
                k++;
                x[k]=0;
            }
        }
        else{
            k--;
        }
    }
}
int main(){
    ans=0;
    Solve();
    printf("%d\n",ans);
    return 0;
}

 

posted @ 2012-12-09 21:07  sumaoqing123  阅读(192)  评论(0编辑  收藏  举报