//很easy的推理得到一定是1*4=4或者3*2=4之类的。(数字代表数的位数) #include <assert.h> #include <algorithm> #include <set> #include <iostream> unsigned int f(void) { typedef std::set<unsigned int> res_set; res_set res; unsigned int digits[9]; unsigned int n1, n2, n3, n4, n5; for( size_t i = 0 ; i < 9 ; ++i ) digits[i] = i + 1; for( ; ; ) { n1 = digits[0]; n3 = n1 * 10 + digits[1]; n4 = digits[2] * 100 + digits[3] * 10 + digits[4]; n2 = digits[1] * 1000 + n4; n5 = digits[5] * 1000 + digits[6] * 100 + digits[7] * 10 + digits[8]; if( (n1 * n2 == n5) || (n3 * n4 == n5) ) res.insert(n5); if( !std::next_permutation(digits, digits + 9) ) break; } unsigned int t = 0; for( res_set::const_iterator iter = res.begin() ; iter != res.end() ; ++iter ) t += *iter; return t; } int main() { std::cout << f() << std::endl; return 0; } Answer: 45228