您的位置:首页 > 其它

Project Euler Problem 32

2009-12-30 18:17 288 查看
]//很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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: