Собственно есть строка "stackoverflow", нужно её разбавить точками(подскажите алгоритм), вот пример:
stackoverflo.w@gmail.com
stackoverfl.ow@gmail.com
stackoverfl.o.w@gmail.com
stackoverf.low@gmail.com
stackoverf.lo.w@gmail.com
stackoverf.l.ow@gmail.com
stackoverf.l.o.w@gmail.com
stackover.flow@gmail.com
stackover.flo.w@gmail.com
stackover.fl.ow@gmail.com
stackover.fl.o.w@gmail.com
stackover.f.low@gmail.com
stackover.f.lo.w@gmail.com
stackover.f.l.ow@gmail.com
stackover.f.l.o.w@gmail.com
stackove.rflow@gmail.com
stackove.rflo.w@gmail.com
stackove.rfl.ow@gmail.com
stackove.rfl.o.w@gmail.com
stackove.rf.low@gmail.com
stackove.rf.lo.w@gmail.com
stackove.rf.l.ow@gmail.com
stackove.rf.l.o.w@gmail.com
stackove.r.flow@gmail.com
stackove.r.flo.w@gmail.com
stackove.r.fl.ow@gmail.com
stackove.r.fl.o.w@gmail.com
stackove.r.f.low@gmail.com
stackove.r.f.lo.w@gmail.com
stackove.r.f.l.ow@gmail.com
stackove.r.f.l.o.w@gmail.com
stackov.erflow@gmail.com
stackov.erflo.w@gmail.com
stackov.erfl.ow@gmail.com
stackov.erfl.o.w@gmail.com
stackov.erf.low@gmail.com
stackov.erf.lo.w@gmail.com
stackov.erf.l.ow@gmail.com
stackov.erf.l.o.w@gmail.com
stackov.er.flow@gmail.com
stackov.er.flo.w@gmail.com
stackov.er.fl.ow@gmail.com
stackov.er.fl.o.w@gmail.com
stackov.er.f.low@gmail.com
stackov.er.f.lo.w@gmail.com
stackov.er.f.l.ow@gmail.com
stackov.er.f.l.o.w@gmail.com
stackov.e.rflow@gmail.com
stackov.e.rflo.w@gmail.com
stackov.e.rfl.ow@gmail.com
stackov.e.rfl.o.w@gmail.com
stackov.e.rf.low@gmail.com
stackov.e.rf.lo.w@gmail.com
stackov.e.rf.l.ow@gmail.com
stackov.e.rf.l.o.w@gmail.com
stackov.e.r.flow@gmail.com
stackov.e.r.flo.w@gmail.com
stackov.e.r.fl.ow@gmail.com
stackov.e.r.fl.o.w@gmail.com
stackov.e.r.f.low@gmail.com
stackov.e.r.f.lo.w@gmail.com
stackov.e.r.f.l.ow@gmail.com
stackov.e.r.f.l.o.w@gmail.com
stacko.verflow@gmail.com
stacko.verflo.w@gmail.com
stacko.verfl.ow@gmail.com
stacko.verfl.o.w@gmail.com
stacko.verf.low@gmail.com
stacko.verf.lo.w@gmail.com
stacko.verf.l.ow@gmail.com
stacko.verf.l.o.w@gmail.com
stacko.ver.flow@gmail.com
stacko.ver.flo.w@gmail.com
stacko.ver.fl.ow@gmail.com
stacko.ver.fl.o.w@gmail.com
stacko.ver.f.low@gmail.com
stacko.ver.f.lo.w@gmail.com
stacko.ver.f.l.ow@gmail.com
stacko.ver.f.l.o.w@gmail.com
stacko.ve.rflow@gmail.com
stacko.ve.rflo.w@gmail.com
stacko.ve.rfl.ow@gmail.com
stacko.ve.rfl.o.w@gmail.com
stacko.ve.rf.low@gmail.com
stacko.ve.rf.lo.w@gmail.com
stacko.ve.rf.l.ow@gmail.com
stacko.ve.rf.l.o.w@gmail.com
stacko.ve.r.flow@gmail.com
stacko.ve.r.flo.w@gmail.com
stacko.ve.r.fl.ow@gmail.com
stacko.ve.r.fl.o.w@gmail.com
stacko.ve.r.f.low@gmail.com
stacko.ve.r.f.lo.w@gmail.com
stacko.ve.r.f.l.ow@gmail.com
stacko.ve.r.f.l.o.w@gmail.com
stacko.v.erflow@gmail.com
stacko.v.erflo.w@gmail.com
stacko.v.erfl.ow@gmail.com
stacko.v.erfl.o.w@gmail.com
stacko.v.erf.low@gmail.com
stacko.v.erf.lo.w@gmail.com
stacko.v.erf.l.ow@gmail.com
stacko.v.erf.l.o.w@gmail.com
stacko.v.er.flow@gmail.com
stacko.v.er.flo.w@gmail.com
stacko.v.er.fl.ow@gmail.com
stacko.v.er.fl.o.w@gmail.com
stacko.v.er.f.low@gmail.com
stacko.v.er.f.lo.w@gmail.com
stacko.v.er.f.l.ow@gmail.com
stacko.v.er.f.l.o.w@gmail.com
stacko.v.e.rflow@gmail.com
stacko.v.e.rflo.w@gmail.com
stacko.v.e.rfl.ow@gmail.com
stacko.v.e.rfl.o.w@gmail.com
stacko.v.e.rf.low@gmail.com
stacko.v.e.rf.lo.w@gmail.com
stacko.v.e.rf.l.ow@gmail.com
stacko.v.e.rf.l.o.w@gmail.com
stacko.v.e.r.flow@gmail.com
stacko.v.e.r.flo.w@gmail.com
stacko.v.e.r.fl.ow@gmail.com
stacko.v.e.r.fl.o.w@gmail.com
stacko.v.e.r.f.low@gmail.com
stacko.v.e.r.f.lo.w@gmail.com
stacko.v.e.r.f.l.ow@gmail.com
stacko.v.e.r.f.l.o.w@gmail.com
stack.overflow@gmail.com
stack.overflo.w@gmail.com
stack.overfl.ow@gmail.com
stack.overfl.o.w@gmail.com
stack.overf.low@gmail.com
stack.overf.lo.w@gmail.com
stack.overf.l.ow@gmail.com
stack.overf.l.o.w@gmail.com
stack.over.flow@gmail.com
stack.over.flo.w@gmail.com
stack.over.fl.ow@gmail.com
stack.over.fl.o.w@gmail.com
stack.over.f.low@gmail.com
stack.over.f.lo.w@gmail.com
stack.over.f.l.ow@gmail.com
stack.over.f.l.o.w@gmail.com
stack.ove.rflow@gmail.com
stack.ove.rflo.w@gmail.com
stack.ove.rfl.ow@gmail.com
stack.ove.rfl.o.w@gmail.com
stack.ove.rf.low@gmail.com
stack.ove.rf.lo.w@gmail.com
stack.ove.rf.l.ow@gmail.com
stack.ove.rf.l.o.w@gmail.com
stack.ove.r.flow@gmail.com
stack.ove.r.flo.w@gmail.com
stack.ove.r.fl.ow@gmail.com
stack.ove.r.fl.o.w@gmail.com
stack.ove.r.f.low@gmail.com
stack.ove.r.f.lo.w@gmail.com
stack.ove.r.f.l.ow@gmail.com
stack.ove.r.f.l.o.w@gmail.com
stack.ov.erflow@gmail.com
stack.ov.erflo.w@gmail.com
stack.ov.erfl.ow@gmail.com
stack.ov.erfl.o.w@gmail.com
stack.ov.erf.low@gmail.com
stack.ov.erf.lo.w@gmail.com
stack.ov.erf.l.ow@gmail.com
stack.ov.erf.l.o.w@gmail.com
stack.ov.er.flow@gmail.com
stack.ov.er.flo.w@gmail.com
stack.ov.er.fl.ow@gmail.com
stack.ov.er.fl.o.w@gmail.com
stack.ov.er.f.low@gmail.com
stack.ov.er.f.lo.w@gmail.com
stack.ov.er.f.l.ow@gmail.com
stack.ov.er.f.l.o.w@gmail.com
stack.ov.e.rflow@gmail.com
stack.ov.e.rflo.w@gmail.com
stack.ov.e.rfl.ow@gmail.com
stack.ov.e.rfl.o.w@gmail.com
stack.ov.e.rf.low@gmail.com
stack.ov.e.rf.lo.w@gmail.com
stack.ov.e.rf.l.ow@gmail.com
stack.ov.e.rf.l.o.w@gmail.com
stack.ov.e.r.flow@gmail.com
stack.ov.e.r.flo.w@gmail.com
stack.ov.e.r.fl.ow@gmail.com
stack.ov.e.r.fl.o.w@gmail.com
stack.ov.e.r.f.low@gmail.com
stack.ov.e.r.f.lo.w@gmail.com
stack.ov.e.r.f.l.ow@gmail.com
stack.ov.e.r.f.l.o.w@gmail.com
stack.o.verflow@gmail.com
stack.o.verflo.w@gmail.com
stack.o.verfl.ow@gmail.com
stack.o.verfl.o.w@gmail.com
stack.o.verf.low@gmail.com
stack.o.verf.lo.w@gmail.com
stack.o.verf.l.ow@gmail.com
stack.o.verf.l.o.w@gmail.com
stack.o.ver.flow@gmail.com
Между каждой парой букв - таких мест у вас 12 - либо точка есть, либо нет. Если есть - обозначим как 1, если нет - как 0. Получается строка из 12 нулей и единиц, т.е. просто бинарное представление числа от 0 до 4095...
Дальше рассказывать или уже все очевидно? :)
Update
Гм, как ни грустно - но таки рассказывать... :(
#include <iostream>
using namespace std;
const char * s = "stackoverflow";
int main(int argc, const char * argv[])
{
for(unsigned int n = 0; n < 4096; ++n)
{
cout << s[0];
unsigned int m = n;
for(int i = 0; i < 12; ++i)
{
if (m&1) cout << ".";
m >>= 1;
cout << s[i+1];
}
cout << endl;
}
}
Рассмотрим строку:
hello
В ней есть длина_строки - 1
мест, куда можно вставить точку:
h.e.l.l.o
В каждое место можно либо вставить точку, либо не вставить. Пусть мы вставили точки в некоторые позиции:
h.e.ll.o
Сопоставим каждой позиции 0 (если мы не вставили в эту позицию точку) или 1 (если вставили):
h.e.l l.o
1 1 0 1
Получим строку из нулей и единиц:
1101
По сути это число от 0
до (длина_слова - 1) ^ 2 - 1
, записанное в двоичной системе исчисления. Переберём все такие числа:
for (int mask = 0; mask < (1 << (длина_слова - 1)); ++mask)
и для каждого числа найдём строку, ему соответствующую:
string result;
for (int i = 0; i < длина_слова - 1; ++i) {
result.push_back(word[i]);
if (mask & (1 << i))
result.push_back('.');
}
result.push_back(word.back());
Ideone
Это обычный перебор. Создаете цикл от 0 до требуемого 2^(n+1) и в тех местах, где бит равен единице, там вставляем точку. Ну так же необходимо проверять, нет ли в этих числах спаренных единиц.
Как это будет выглядеть в двоичном виде:
1 - 0001
2 - 0010
3 - 0011 (отбрасываем)
4 - 0100
5 - ...
Ну вот пример кода (правда на С++, ну думаю это не проблема) :
bool check(int num, int length)
{
if ((1 << length)&num) return false;
if (1&num) return false;
for (int i = 0; i < length-1; i++)
{
if ( (1 << i) & num && (1 << (i + 1)) & num) return false;
}
return true;
}
int main()
{
string s = "stackoverflow";
int length = s.length();
for (int mask = 0; mask < (1 << 2*length); mask++)
{
if (!check(mask,length)) continue;
string copy = s;
for (int i = 0; i < length; i++)
{
if (mask & (1 << i)) copy.insert(copy.begin()+i,'.');
}
cout << copy <<endl;
}
}
Часть вывода:
sta.cko.v.erflow
s.t.ack.o.verflow
stac.ko.v.erflow
s.ta.ck.o.verflow
st.a.ck.o.verflow
stack.o.v.erflow
s.tac.k.o.verflow
st.ac.k.o.verflow
sta.c.k.o.verflow
s.t.a.c.k.overflow
stackoverf.low
s.tackover.flow
st.ackover.flow
sta.ckover.flow
s.t.ackove.rflow
stac.kover.flow
s.ta.ckove.rflow
st.a.ckove.rflow
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Сортировка списка с учетом регистра listSort() - C#
Я пытался создать автообновление своей программы через zip-архивДля этого использую DotNetZip (Ionic
Здравствуйте! Недавно столкнулся с проблемой скачивания картинки с сайта litresru
Доброй ночи, подскажите как использовать ProgressBar при загрузке множества файловУ меня всегда разный список ссылок и программа узнает об этом...