Лодка+Весло=Катер

Привет всем.

Обнаружил у себя в модульных тестах одно забавное применение генератора перестановок — 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

Leave a Comment