Лодка+Весло=Катер
Привет всем.
Обнаружил у себя в модульных тестах одно забавное применение генератора перестановок — structure::t_transposition_iterator. Решаем задачу из далекого детства 🙂
TTracer tracer(pLog,"test_003");
typedef t_transposition_iterator<int> t_iterator;
t_iterator it;
for(int i=0;i<=9;++i)
it.add(i);
// 0 1 2 3 4 5 6 7 8 9
// л о д к а в е с т р
// l o d k a v e s t r
// лодка+весло=катер
int num=0;
do
{
++num;
const int lodka=10000*it[0]+
1000*it[1]+
100*it[2]+
10*it[3]+
it[4];
const int veslo=10000*it[5]+
1000*it[6]+
100*it[7]+
10*it[0]+
it[1];
const int kater=10000*it[3]+
1000*it[4]+
100*it[8]+
10*it[6]+
it[9];
if(lodka+veslo==kater)
{
tracer<<"pass:"<<num<<send;
tracer<<lodka<<"+"<<veslo<<"="<<kater<<send;
break;
}
if((num%100000)==0)
tracer<<"pass:"<<num<<send;
}
while(++it);
Вывод
[test_003] pass:100000
[test_003] pass:200000
[test_003] pass:300000
[test_003] pass:400000
[test_003] pass:428354
[test_003] 12693+80712=93405