表妹的题(回溯)
看这个算式: ☆☆☆ + ☆☆☆ = ☆☆☆ 如果每个五角星代表 1 ~ 9 的不同的数字。 这个算式有多少种可能的正确填写方法?
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
#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; }