int sum = 0, m; inttoInt(constchar *str, int pos, int len){ int ans = 0, t = 1; for(int i = pos+len-1; i >= pos; i--){ ans += (str[i]-'0')*t; t *= 10; } // for(int i = 0; i < len; ++i){ // ans = 10*ans+(str[pos++]-'0'); // } return ans; } intmain(){ cin >> m; string str = "123456789"; do{ constchar *s = str.c_str(); for(int i = 1; i <= 7; ++i){ // string a = str.substr(0, i); // int a1 = toInt(a); int a1 = toInt(s, 0, i);//第一个数a if(a1 >= m) break; for(int j = 1; j <= 9-i-1; ++j){ // string b = str.substr(i, j); // string c = str.substr(i+j); // int b1 = toInt(b); // int c1 = toInt(c); int b1 = toInt(s, i, j);//第二个数b int c1 = toInt(s, i+j, 9-i-j);//第三个数c if(b1%c1==0 && (a1+b1/c1)==m){ sum++; } } } }while(next_permutation(str.begin(), str.end())); cout << sum << endl; return0; }
手写Dfs实现全排列
手写一个没有多难嘛,但同时要注意上面提到的const char *问题
当要将字符串与数值拼接,C++就有点讨厌了,只会用 stringstream stringstream ss; ss << str << i;