这个题跟前面那个寒假作业差不多,比那个还简单,就是排一下序,把所有的数都记录一遍,当长度够的时候就进行特判,还有值得一提的是,因为我们要求的是4位数,4位数,2位数,所以这三个数的开头值不能是0,要不然就会使数变成低一位数,虽然也是等于900,但是最后使不符合题意的。
#include<iostream> #include<cstring> #include<algorithm> using namespace std ; int v[20] ; int a , b , c ; int path[20]; void dfs(int u){ if(u == 1 &&path[0]==0) return ; if(u==5 && path[4] == 0) return ; if(u==9 && path[8] == 0 ) return ; if(u == 10){ int x = path[0] * 1000 + path[1] * 100 + path[2] * 10 + path[3] ; int y = path[4] * 1000 + path[5] * 100 + path[6] * 10 + path[7] ; int z = path[8] * 10 + path[9] ; if(x == 5012 && y == 4987 && z == 36) return ; if((x - y ) * z == 900 && x && y && z){ //for(int i = 0 ; i < 10 ; i ++) cout << path[i] << endl; a = x , b = y , c = z ; return ; }else return ; } for(int i = 0 ; i < 10 ; i ++){ if(!v[i]){ path[u] = i ; v[i] = 1 ; dfs(u + 1) ; v[i] = 0 ; } } return ; } int main(){ dfs(0); cout << "(" << a << "-" << b <<")*" << c<<"=900"<< endl ; }