и снова я предлагаю вам сыграть в игру "найдите гавнокод"
цель: вывести все слова с перебранными буквами, как то
ввод: asd
вывод:
asd
ads
sad
sda
das
dsa
//dumpz.org/16512/
выдает одиночные буковки и двойные, чего, впринципе, быть не должно.
я не вкуриваю, почему.
помогите, пожалуйста) с рекурсией сталкиваюсь во второй раз)
1 февраля 2010 в 23:05
я тоже школьник
я имею ввиду нарицательное))))
1 февраля 2010 в 23:04
Ой=))
1 февраля 2010 в 23:00
что значит очередной школьник?!
я тоже школьник!
1 февраля 2010 в 21:01
какую табличку?
1 февраля 2010 в 21:01
Алексей, не обращайте внимания, это очередной школьник.
Антон, вы не в ту группу обратились.
1 февраля 2010 в 20:05
Поставте табличку ! Плиз !
31 января 2010 в 16:02
забыл про эту функцию=))))
31 января 2010 в 12:00
ахаххахаха))
31 января 2010 в 11:05
#include <algorithm>
#include <string>
#include <iostream>
using namespace std;
int main()
{
__ string a = "abc";
__bool res = true;
__while(res)
__{
____res = next_permutation(a.begin(), a.end());
____cout<<a<<endl;
__}
}
31 января 2010 в 10:05
красивее, только я хотел освоить рекурсию, а не красоту
31 января 2010 в 10:03
#10) Переделать из циферок в буковки конечно невыполнимая задача…
Если делать без повторов то и должно быть n!
123
132
213
231
312
321
3! = 6
В #1) для 3-ех букв тоже выдается 6 строк.
А насчет того, что я без рекурсии, это да, виноват) Но согласитесь, такой код красивее)
31 января 2010 в 10:00
ошибку у себя понял, еще одну…
31 января 2010 в 9:03
Михаил, Алексей, спасибо, я понял, как вы сделали…
просто я хотел вместо стирания последней буквы проходить циклом, прибавляя каждую букву, а когда буквы станут максимальными, стирать основное слово, куда все и записывается.
ваше решение лучше, однозначно.
зы. про флажки – так надежнее хД
кстати, gcc только глобальным переменным дает 0, или всем, или всем дает мусор?
30 января 2010 в 23:04
я делал с помощью твоего исходника, я не понимаю зачем там string, ну это ладно.
я прокомментирую немного свой код.
во первых глобальные переменные (массив) типа bool специализируются значениями false. (в ручную можно не делать)
current_word+=word[i];-прибавляем в конец символ
used[i]=true; -ставим "флаг" в позицию, говорящую о том, что дальше в ЭТОЙ перестановке этот элемент нельзя использовать.
recursion(current_length+1);- доделываем ЭТУ перестановку
current_word.erase(current_word.end()-1,current_word.end());- удаляем символ, который мы поставили (последний)
used[i]=false;- возвращаем флаг на позицию в которой мы можем использовать в дальнейшем данный элемент.
30 января 2010 в 23:04
как то так=)
30 января 2010 в 23:03
Александр, там просто сама идея немного неправильная.
Есть слово. Ты к нему прибавляешь неиспользованную букву, помечаешь ее, запускаешь рекурсию, а потом удаляешь эту букву, и помечаешь е, как неиспользованную.
Соответственно, если дошел до конца строки, то просто выводишь ее и не надо ничего делать ни со строкой, ни с пометками
30 января 2010 в 23:02
Николай, ты, кажись, что-то путаешь. Выводить буковки надо, это раз, во-вторых кол-во строк будет n!, а не 2^n
1<<y&i -(2^y and i), где and – побитовое и
30 января 2010 в 23:02
угу.
может кто-нибудь объяснить, в чем ошибка в моем коде?
я покурил код Алексея, вроде нормально… но почему сам ошибся, не разобрался. тупой…?
30 января 2010 в 23:01
смысл был в рекурсии.
что значит 1<<y&i?
30 января 2010 в 23:00
а, так надо без повторений, тогда в сто раз проще
int i,y;
for(i=0;i<pow(2,3);i++)
{
for(y=0;y<3;y++)
{
if(1<<y&i)
{
printf("%d ",y);
}
}
printf("\n");
}
30 января 2010 в 22:02
спасибо, там без повторений.
а почему у меня неправильно, можешь сказать? или код настолько быдлянский, что разобраться сложно?
30 января 2010 в 22:01
//dumpz.org/16525/
это если не встречается повторений.
30 января 2010 в 21:02
у тебя неправильный код…
30 января 2010 в 21:01
честно говоря, не понял до конца. можешь указать ошибки в коде?
30 января 2010 в 20:05
#include<iostream>
int mas[999],m[999],N;
void permut(int num,int L)
{
int i;
if(num==L)
{
for(i=0;i<L;i++) printf("%d ",m[i]);
printf("\n");
return;
}
for(i=0;i<N;i++)
{
m[num]=mas[i];
permut(num+1,L);
}
return;
}
void main()
{
N=3;
for(int i=1;i<=N;i++) mas[i-1]=i;
for(int L=1;L<=N;L++) permut(0,L);
}
Пляши от этого
В мэине убрать второй цикл и будут только последовательности одной длины.
30 января 2010 в 19:05
нашел то, что не помечал флажки.
исправил, выводит еще более херню.
//dumpz.org/16519/